You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何过滤数组中的零?为何array_filter统计零数量结果异常?

问题原因分析

核心问题:array_filter的判断逻辑

array_filter的工作机制是保留回调函数返回「真值」的元素,而PHP里的假值包含0、''、false、null、[]等。

你的代码中,当判断$x == 0时,返回的是$x本身也就是0——这属于假值,所以符合条件的元素会被过滤掉,最终返回的数组是空的,count结果自然为0。

而当判断$x > 0时,返回的是$x(正数),属于真值,这些元素会被保留,数组里有5个元素,count结果就是5。

修复后的代码

只需要在回调里明确返回布尔判断结果即可:

$arr = [1,2,0,3,4,5,0];
$countzero = count(
    array_filter($arr, function($x){
        return $x == 0; // 直接返回判断的布尔结果true/false
    })
);

echo $countzero; // 输出2

也可以用更简洁的箭头函数(PHP 7.4及以上版本支持):

$arr = [1,2,0,3,4,5,0];
$countzero = count(array_filter($arr, fn($x) => $x == 0));
echo $countzero;

另外还可以用array_count_values直接统计所有值的出现次数,效率更高:

$arr = [1,2,0,3,4,5,0];
$counts = array_count_values($arr);
echo $counts[0] ?? 0; // 输出2,??处理0不存在的边界情况

内容的提问来源于stack exchange,提问作者Iwan Kurniawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:33:28