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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:54:03