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

如何统计嵌套数组中含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),否则返回false
  • array_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:05:25