如果我使用array_filter过滤数组以消除空值,则会保留密钥并在数组中生成“漏洞”。例如:
The filtered version of
[0] => 'foo'
[1] => null
[2] => 'bar'
is
[0] => 'foo'
[2] => 'bar'
我怎样才能得到,而不是
[0] => 'foo'
[1] => 'bar'
答案 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 => '',
)