0

在下面的示例中,$list 是由用户在代码前面的输入创建的数组,并且一些槽用户没有输入任何内容。我想跳过空项目,因此不会在输出中创建逗号。

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


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

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

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

得到了解决方案。它看起来像这样:

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

2 回答 2

1

array_filter,当不传递第二个参数时,将删除任何空条目。从那里您可以正常进行:

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

implode如果您只是将其转换为 CSV,您也可以使用:

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

旁注虽然在这种情况下array_filter可能有效,但值得注意的是,这会删除导致“虚假”结果的条目。也就是说:

$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

于 2013-10-10T13:33:06.607 回答
1

要忽略空值,您可以使用

$list = array_filter($list);

结果

大批
(
    [0] => 第一个
    [1] => 第二
    [4] => 第五
    [5] => 第六
)

来源:马克

于 2013-10-10T13:30:19.830 回答