php array_filter没有密钥保存

时间:2010-04-16 12:50:12

标签: php arrays

如果我使用array_filter过滤数组以消除空值,则会保留密钥并在数组中生成“漏洞”。例如:

The filtered version of
    [0] => 'foo'
    [1] =>  null
    [2] => 'bar'
is 
    [0] => 'foo'
    [2] => 'bar'

我怎样才能得到,而不是

[0] => 'foo'
[1] => 'bar'

2 个答案:

答案 0 :(得分:71)

您可以在过滤后使用array_values来获取值。

答案 1 :(得分:2)

使用此输入:

$array=['foo',NULL,'bar',0,false,null,'0',''];

您可以通过以下几种方式进行此操作。 Demo

提出array_filter贪婪的默认行为略显偏离主题,但如果您正在搜索此页面,这可能是与您的项目/任务相关的重要信息:

var_export(array_values(array_filter($array)));  // NOT GOOD!!!!!

输出错误:

array (
  0 => 'foo',
  1 => 'bar',
)

现在可以采用哪些方法:

方法#1 :( array_values()array_filter() w / !is_null()

var_export(array_values(array_filter($array,function($v){return !is_null($v);})));  // good

方法#2 :( foreach(),自动编入索引的数组,!==null

foreach($array as $v){
    if($v!==null){$result[]=$v;}
}
var_export($result);  // good

方法#3 :( array_walk(),自动索引数组,!is_null()

array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});
var_export($filtered);  // good

这三种方法都提供以下"无空"输出:

array (
  0 => 'foo',
  1 => 'bar',
  2 => 0,
  3 => false,
  4 => '0',
  5 => '',
)