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,将做空字符串。