<?php
$array = array('foo', 'bar', 'baz');
$array = array_filter($array, function ($var) {
return $var !== 'bar';
});
print_r($array); // indexes 0 and 2
print_r(array_values($array)); // indexes 0 and 1
8
I worry about how many programmers have innocently copy/pasted the array_values(array_filter()) method into their codes - 我想知道有多少程序员因为array_filter的贪婪而不知不觉地遇到了问题 . 或者更糟糕的是,有多少人从未发现该函数从数组中清除了太多的值...
array_walk( // iterate each element of an input array
$array, // this is the input array
function($v)use(&$filtered){ // $v is each value, $filter (output) is declared/modifiable
if(!is_null($v)){ // this literally checks for null values
$filtered[]=$v; // value is pushed into output with new indexes
}
}
);
4 回答
使用
array_values()
:I worry about how many programmers have innocently copy/pasted the array_values(array_filter()) method into their codes - 我想知道有多少程序员因为array_filter的贪婪而不知不觉地遇到了问题 . 或者更糟糕的是,有多少人从未发现该函数从数组中清除了太多的值...
我将为从数组中剥离
NULL
元素并重新索引键的两部分过程提供更好的替代方法 .然而,首先,我强调
array_filter()
的贪婪本质,以及如何能够默默地为你的项目做些事情,这一点非常重要 . 这是一个包含混合值的数组,它将暴露出麻烦:无论大写/小写如何,都将删除空值 .
但是当我们使用array_values()&array_filter()时,看看数组中剩下的是什么:
输出数组($ array):
现在看一下使用array_walk()&is_null()生成新过滤数组的方法得到的结果:
这可以写在多行上,以便于阅读/解释:
输出数组($ filter):
使用我的方法,您可以获得重新索引的键,所有非空值以及任何空值 . 一个干净,便携,可靠的单线程,可满足您的所有阵列空值过滤需求 . 这是demonstration .
同样,如果要删除empty,false和null元素(保留零),这四种方法将起作用:
要么
要么
要么
输出:
最后,对于任何喜欢语言结构语法的人,您也可以将限定值推送到新数组中以发布新索引 .
如果在数组上调用array_values,它将从零重新编制索引 .
如果您使用阵列过滤器,请执行以下操作