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

如何对父子层级关联的PHP数组实现父级累加子项计数求和

实现方案

你之前得到错误结果大概率是遍历逻辑的问题,比如在遍历过程中修改了原始值导致重复累加,或者父级节点匹配逻辑有误。可以按以下逻辑实现需求:

核心思路

  • 先保留原始数组的初始值作为累加基数,单独复制一份数组存储最终计算结果,避免遍历过程中修改原始值干扰计算
  • 对每个节点,按照「子键前缀为父键」的父子规则,逐层向上查找所有存在于数组中的父级节点
  • 将当前节点的计数累加到所有匹配到的父级节点的最终结果中

实现代码

// 原始数组
$foo_array = [
    3533 => 4,
    353 => 3,
    351 => 2,
    35 => 0,
];

// 复制原始数组作为结果数组的初始值
$result = $foo_array;

foreach ($foo_array as $key => $value) {
    // 逐层生成父级候选键
    $parent_key = substr($key, 0, -1);
    while ($parent_key !== '') {
        // 强转为int避免PHP数字键和字符串键匹配异常
        $parent_key = (int)$parent_key;
        // 父级存在则累加当前节点的计数
        if (isset($result[$parent_key])) {
            $result[$parent_key] += $value;
        }
        // 继续查找更上层的父级
        $parent_key = substr($parent_key, 0, -1);
    }
}

// 输出验证结果
print_r($result);

输出结果

运行代码后最终得到的$result值为:

Array
(
    [3533] => 4
    [353] => 7
    [351] => 2
    [35] => 9
)

完全符合你要求的键35最终计数为9的预期。

注意事项

  • 如果你的实际业务中父子关联规则不是「子键前缀为父键」,只需要修改父级查找的逻辑即可,整体累加逻辑不需要调整
  • 如果你的数组键本身是字符串类型,可以去掉父级键强转int的那行代码,避免匹配异常

内容的提问来源于stack exchange,提问作者سبحان مقیسه

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:06:05