PHP递归函数实现多级嵌套数组所有子节点指定值求和
PHP递归统计多级嵌套数组指定字段总和
实现逻辑
我们需要实现一个通用递归函数,逻辑如下:
- 每次进入函数先初始化当前层级的总和为0
- 检查当前数组是否存在要统计的目标字段,若存在且为数值类型则累加到总和
- 检查当前数组是否存在子嵌套数组,若存在则遍历所有子元素,递归调用函数获取子层级总和并累加
- 最终返回当前层级的累计总和
完整可运行代码
<?php // 示例JSON数据 $json = '{ "name": "ABC", "subArr": [{ "name": "def", "count": 10, "subArr": [{ "name": "ghi", "count": 5 }, { "name": "jkl", "count": 15, "subArr": [{ "name": "mno", "count": 5 }] }] }, { "name": "pqr", "count": 10, "subArr": [{ "name": "stu", "count": 5 }, { "name": "vwx", "count": 15, "subArr": [{ "name": "yz", "count": 5, "subArr": [{ "name": "yz", "count": 5, "subArr": [{ "name": "yz", "count": 5 }] }] }] }] }] }'; // 递归求和函数 function array_sum_recursive(array $array, string $target_field, string $children_key = 'subArr'): int|float { $sum = 0; // 累加当前层级目标字段值 if (isset($array[$target_field]) && is_numeric($array[$target_field])) { $sum += $array[$target_field]; } // 递归处理子数组 if (isset($array[$children_key]) && is_array($array[$children_key])) { foreach ($array[$children_key] as $child_item) { if (is_array($child_item)) { $sum += array_sum_recursive($child_item, $target_field, $children_key); } } } return $sum; } // 调用示例 $arr = json_decode($json, true); $total_count = array_sum_recursive($arr, 'count'); echo $total_count; // 输出结果为80 ?>
功能说明
- 函数支持自定义统计字段和子数组键名,不需要硬编码适配固定结构的嵌套数组
- 内置字段存在性和数值类型校验,避免异常报错
- 支持任意层级的嵌套数组统计
内容的提问来源于stack exchange,提问作者Umer Javed
相关产品推荐
相关产品推荐

