如何检查阵列插槽是否为空?

时间:2013-10-10 13:28:46

标签: php

在下面的示例中,$ list是由代码中较早的用户输入创建的数组,以及用户未输入的某些插槽。我想跳过空项,因此输出中不会创建逗号。

$list = array("first", "second", "", "", "fifth", "sixth", "", "");


foreach ($list as $each){$places .= $each . ",";}

结果 第一,第二,,,第五,第六,,,

我想要的结果 第一,第二,第五,第六

有一个解决方案。它看起来像这样:

$list = array_filter($list);
$places .= implode (",",$list);

2 个答案:

答案 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不同