如何统计嵌套数组中含active状态的sub-dataxxx元素数量?
更简洁的PHP数组统计实现方式
针对你需要统计$arr['data2']下包含至少一个status='active'项的子元素数量的需求,以下几种方法无需嵌套foreach,代码更简洁:
方法一:array_filter + count
利用array_filter过滤出符合条件的子元素,再用count统计数量:
$count = count(array_filter($arr['data2'], function($subData) { // 提取当前子元素中所有status值,检查是否存在'active' return array_search('active', array_column($subData, 'status')) !== false; }));
解释:
array_column($subData, 'status')提取每个子数组里的status字段,得到一个纯状态值的数组array_search('active', ...)判断该数组中是否存在'active',存在则返回对应键(非false),否则返回falsearray_filter会保留所有返回值为true的子元素,最后count即可得到符合条件的子元素总数
方法二:array_reduce直接累加
用array_reduce直接遍历并累加符合条件的数量,避免创建额外数组,性能更优:
$count = array_reduce($arr['data2'], function($carry, $subData) { // 检查当前子元素是否存在active状态,存在则加1,否则加0 return $carry + (int)in_array('active', array_column($subData, 'status')); }, 0);
解释:
in_array('active', ...)判断状态数组中是否存在'active',返回布尔值- 把布尔值转成整数(
true为1,false为0),累加到初始值为0的carry变量中,最终得到总数
方法三:PHP 7.4+ 箭头函数简化
如果你的PHP版本在7.4及以上,可以用箭头函数让代码更紧凑:
// array_filter + count 简化版 $count = count(array_filter($arr['data2'], fn($sd) => array_search('active', array_column($sd, 'status')) !== false)); // array_reduce 简化版 $count = array_reduce($arr['data2'], fn($c, $sd) => $c + (int)in_array('active', array_column($sd, 'status')), 0);
内容的提问来源于stack exchange,提问作者physicsboy
相关产品推荐
相关产品推荐

