基于键对2个或更多关联数组值求和

时间:2018-01-26 11:43:36

标签: php arrays

我搜索了大约1小时。它似乎是重复的,但我找不到帮助我的东西。

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

如何在一个数组中将所有这些加起来如下:

$summed = array('aa'=>14,'bb'=>22,'cc'=>5,'dd'=>11,'ee'=>5);

4 个答案:

答案 0 :(得分:2)

合并所有数组和总和值(如果它是数组

$res = array_merge_recursive($a, $b, $c,$d);
foreach($res as &$x) {
    if (is_array($x)) {
       $x = array_sum($x); 
    }
}
print_r($res);

demo

答案 1 :(得分:0)

您可以尝试这样的事情:

<textarea name="text" oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea>

输出:

$summed=[] ;
foreach ([$a,$b,$c,$d] as $arr) {
    foreach ($arr as $k => $v) {
        if (!isset($summed[$k])) $summed[$k] = 0;
        $summed[$k]+=$v;
    }
}
print_r($summed);

答案 2 :(得分: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);

$arrays = [$a, $b, $c, $d];

$result = [];

foreach ($arrays as $value_array) {
    foreach ($value_array as $key => $value) {
        if (array_key_exists($key, $result)) {
            $result[$key] += $value;
        } else {
            $result[$key] = $value;
        }
    }
}

答案 3 :(得分:0)

使用较少循环而不是迭代完整数组的方法是从数组中获取所有键并使用array_column和array_sum。

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

$arr = [$a,$b,$c,$d];

$keys = array_keys(array_merge($a,$b,$c,$d)); //merge arrays and get keys ['aa','bb'] etc.
Foreach($keys as $key){
    // Sum column of 'aa', 'bb' etc from array
    $sums[$key] = array_sum(array_column($arr, $key));
}

Var_dump($sums);

https://3v4l.org/ZHtWf