如何按条件统计PHP数组元素数量?寻求非循环的优化方案
统计数组中type=0元素的简洁方法
嘿,这个需求我太熟了!不用手动写循环判断的话,PHP里有几个现成的数组函数能帮你快速搞定,给你分享两个实用方案:
方案一:array_filter + count 直观过滤统计
这是最容易理解的方式,先用array_filter()筛选出所有符合type=0的元素,再用count()统计筛选后的数组长度:
首先先修正你数组的语法(注意PHP数组里键值对要用=>而不是=):
$arr = [ ["name" => "Martin", "type" => "0"], ["name" => "Jack", "type" => "0"], ["name" => "Tiam", "type" => "1"] ];
然后执行统计:
$countType0 = count(array_filter($arr, function($item) { // 这里用严格相等判断,避免类型混淆(比如数字0和字符串"0") return $item['type'] === '0'; })); echo $countType0; // 输出预期的2
方案二:array_column + array_count_values 高效批量统计
如果你的数组比较大,或者之后还需要统计其他type的值,这个方法更高效:先把所有type字段提取成一维数组,再用array_count_values()统计每个值的出现次数,直接取"0"对应的数量即可:
// 提取所有type字段到一维数组 $allTypes = array_column($arr, 'type'); // 统计每个type值的出现次数 $typeCounts = array_count_values($allTypes); // 用null合并运算符防止"0"不存在时报错,默认返回0 $countType0 = $typeCounts['0'] ?? 0; echo $countType0; // 输出2
这个方法的好处是,一次处理就能拿到所有type值的统计结果,比如之后要拿type=1的数量,直接用$typeCounts['1']就行,非常方便。
补充一下:你之前用count($arr)返回3是正常的,因为它统计的是整个数组的顶层元素个数,不管元素内部的type值,所以我们需要通过过滤或提取字段来得到目标子集的数量。
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

