Answers:
您可以使用array_filter()
:
如果未提供回调,则将删除所有等于(请参阅转换为boolean)的输入项。
FALSE
implode('-', array_filter($array));
显然,如果您的数组中有0
(或任何其他值为的值false
)并且想要保留它,则此方法将不起作用。但是您可以提供自己的回调函数。
false
和0
也被扔掉?
empty
,在您使用它的同时,也将0
其false
视为false
(删除)。
array_filter()
在默认情况下滤波器关每一个false
,null
空字符串(“”)和0
。
false
:空数组0.0
和"0"
。
我想您不能考虑它是内置的(因为该函数正在使用用户定义的函数运行),但是您始终可以使用array_filter。
就像是:
function rempty ($var)
{
return !($var == "" || $var == null);
}
$string = implode('-',array_filter($array, 'rempty'));
empty
与完全不传递回调函数具有相同的效果。编辑:您必须否定返回值。否则,将仅返回空元素;)(实际上empty
像以前一样使用也是错误的)
implode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
过滤器的实现方式仅取决于您看到的“空”。
function my_filter($item)
{
return !empty($item); // Will discard 0, 0.0, '0', '', NULL, array() of FALSE
// Or...
return !is_null($item); // Will only discard NULL
// or...
return $item != "" && $item !== NULL; // Discards empty strings and NULL
// or... whatever test you feel like doing
}
function my_join($array)
{
return implode('-',array_filter($array,"my_filter"));
}
要删除null
,false
,empty
字符串但保留0
等使用FUNC。' strlen
'
$arr = [null, false, "", 0, "0", "1", "2", "false"];
print_r(array_filter($arr, 'strlen'));
将输出:
//Array ( [3] => 0 [4] => 0 [5] => 1 [6] => 2 [7] => false )
$array = ["one", NULL, "two", NULL, "three"];
$string = implode("-", array_diff($array, [NULL]));
echo $string;
退货 one-two-three
试试这个:
if(isset($array)) $array = implode(",", (array)$array);
isset()
或将输入数组转换为array
原始帖子的任何问题?
join
不跳过未定义的元素。实际上,它们会导致警告。$a[0]="a"; $a[2]="c"; say join "-",@a;
显示Use of uninitialized value within @a in join or string
和a--c
。可以join '-', grep !defined, ...
用来跳过未定义的值。grep !length,
将做空字符串。