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

如何基于键名对两个及以上关联数组的值求和?

关联数组按键名求和的解决方案

嘿,我懂你找了一小时没找到可行方案的郁闷——这种看起来应该很简单的问题,有时候反而容易在细节上卡壳。针对你需要把多个关联数组按键名求和的需求,我给你整理了两种实用的实现方式,你可以根据自己的场景来选:

方法一:适用于固定数量的数组

如果你的数组数量是确定的(比如你给出的$a、$b、$c、$d四个),可以先收集所有数组的键,然后遍历每个键,在各个数组中累加对应的值(注意处理数组中不存在该键的情况,默认加0)。

代码示例:

$a = array('aa'=>10, 'bb'=>2, 'cc'=>5);
$b = array('aa'=>1, 'bb'=>20, 'dd'=>11);
$c = array('aa'=>3);
$d = array('ee'=>5);

// 合并所有数组的键,得到唯一的键列表
$allKeys = array_unique(array_merge(array_keys($a), array_keys($b), array_keys($c), array_keys($d)));

$summed = array();
foreach ($allKeys as $key) {
    // PHP7+ 可用null合并运算符,不存在的键默认取0
    $summed[$key] = ($a[$key] ?? 0) + ($b[$key] ?? 0) + ($c[$key] ?? 0) + ($d[$key] ?? 0);
    
    // 如果是PHP5环境,替换成下面的写法:
    // $summed[$key] = (isset($a[$key]) ? $a[$key] : 0) + (isset($b[$key]) ? $b[$key] : 0) + (isset($c[$key]) ? $c[$key] : 0) + (isset($d[$key]) ? $d[$key] : 0);
}

print_r($summed);

方法二:适用于任意数量的数组(更推荐)

如果后续可能会新增更多数组,这种方法更通用,不需要每次修改代码去适配新数组。我们可以把所有要求和的数组放到一个大数组里,然后遍历每个数组的键值对,逐个累加求和:

// 把所有需要求和的数组放到一个大数组中
$arrays = array(
    array('aa'=>10, 'bb'=>2, 'cc'=>5),
    array('aa'=>1, 'bb'=>20, 'dd'=>11),
    array('aa'=>3),
    array('ee'=>5)
);

$summed = array();
foreach ($arrays as $array) {
    foreach ($array as $key => $value) {
        // 如果目标数组还没有这个键,先初始化为0
        if (!isset($summed[$key])) {
            $summed[$key] = 0;
        }
        $summed[$key] += $value;
    }
}

print_r($summed);

两种方法运行后,都会得到你想要的目标数组:

Array
(
    [aa] => 14
    [bb] => 22
    [cc] => 5
    [dd] => 11
    [ee] => 5
)

个人更推荐第二种方法,因为它的扩展性更强,不管你后续要加多少个数组,只要把新数组放到$arrays里就行,逻辑也更简洁直观。

内容的提问来源于stack exchange,提问作者Botea Florin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:50