PHP中如何过滤数组负整数?现有array_filter代码报错求指导
解决PHP数组移除负整数的问题
嘿,我来帮你搞定这个数组过滤的问题!你目前的代码没生效,核心是对array_filter的回调函数传递方式理解错了,咱们一步步拆解解决:
首先纠正array_filter的正确用法
你写的positive函数有个小细节可以优化——array_filter要求回调函数返回布尔值(true/false),用来判断当前元素是否保留。虽然返回非零值也会被视为true,但明确返回布尔结果会更清晰。另外,调用array_filter时,你不需要手动给回调传参数,它会自动把数组里的每个元素逐个传给回调函数。
修正后的代码
$array = array(-122,121,-124,124,-121,122,-122,124,-121,124,-122,125,-121,121,-123,122,-124,120); // 定义判断正整数的回调函数,返回布尔值 function positive($var) { return $var >= 0; } // 调用array_filter时,只需要传递函数名的字符串(回调引用) print_r(array_filter($array, 'positive'));
更简洁的匿名函数写法
如果不想单独定义函数,用匿名函数会更紧凑:
$filteredArray = array_filter($array, function($var) { return $var >= 0; }); print_r($filteredArray);
关于你问的array_walk和array_map
这两个函数也能实现需求,但它们的设计初衷不是过滤,所以用起来会绕一点:
用array_map实现
array_map是用来转换数组元素的,不是直接过滤。要实现过滤,得先把负数转成null,再用array_filter过滤掉空值:
// 先把负数转为null,再过滤掉空值 $mappedArray = array_map(function($var) { return $var >= 0 ? $var : null; }, $array); $filteredArray = array_filter($mappedArray); print_r($filteredArray);
用array_walk实现
array_walk是用来遍历数组执行操作的,它不会返回新数组,所以需要手动创建一个空数组来收集符合条件的元素:
$filteredArray = []; array_walk($array, function($var) use (&$filteredArray) { if ($var >= 0) { $filteredArray[] = $var; } }); print_r($filteredArray);
总结
最适合这个需求的还是array_filter,因为它就是专门为数组过滤场景设计的,代码最简洁直观,性能也最优。
内容的提问来源于stack exchange,提问作者spice
相关产品推荐
相关产品推荐

