在下面的示例中,$ list是由代码中较早的用户输入创建的数组,以及用户未输入的某些插槽。我想跳过空项,因此输出中不会创建逗号。
$list = array("first", "second", "", "", "fifth", "sixth", "", "");
foreach ($list as $each){$places .= $each . ",";}
结果 第一,第二,,,第五,第六,,,
我想要的结果 第一,第二,第五,第六
有一个解决方案。它看起来像这样:
$list = array_filter($list);
$places .= implode (",",$list);
答案 0 :(得分:1)
要忽略空值,可以使用
$list = array_filter($list);
结果
Array ( [0] => first [1] => second [4] => fifth [5] => sixth )
来源:Mark
答案 1 :(得分:1)
array_filter
,当没有传递第二个参数时,将删除所有空条目。从那里你可以照常进行:
foreach (array_filter($list) as $each){
$places .= $each . ',';
}
如果您只是将其转换为CSV,也可以使用implode
:
$places .= implode(',', array_filter($list));
旁注虽然在这种情况下array_filter
可能会有效,但值得注意的是,这会删除导致"falsy" result的条目。也就是说:
$list = array_filter(array('foo','0','false',''));
// Result:
// array(2) {
// [0]=>
// string(3) "foo"
// [2]=>
// string(5) "false"
// }
所以要小心。如果用户可能输入数字,我会坚持比较empty
。或者,您可以使用array_filter
的第二个参数使其更明确:
function nonEmptyEntries($e)
{
return ((string)$e) !== '';
}
$list = array_filter($list, 'nonEmptyEntries');
// result:
//array(3) {
// [0]=>
// string(3) "foo"
// [1]=>
// string(1) "0"
// [2]=>
// string(5) "false"
//}
(请注意,保留0
条目,这与条款array_filter
不同