在与基于其键的另一个数组进行比较后,如何在PHP中追加现有数组?

时间:2014-11-05 15:41:06

标签: php arrays

Array1
(
[a]=>1; [b]=>2; [c]=>3
)

Array2
(
[a]=>1;[b] =>1
)

Required result:
Array1
(
[a]=>2; [b]=>3; [c]=>3
)

如何基于键将Array1附加到Array2的值?感谢。

6 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

foreach($array2 as $key2 => $val2){
    if(key_exists($key2, $array1)) {
        $array1[$key2] += $val2;
    } else {
        $array1[$key2] = $val2;
    }
}

答案 1 :(得分:1)

部分问题是数组1可能没有与数组2相同的所有键。因此,需要来自两个原始数组的所有键的数组,然后遍历这些键,检查它们是否存在原始数组,最后将其添加到最终的组合数组中。

<?php
    $array1 = array('a' => 1, 'b' => 2, 'c' => 3);
    $array2 = array('a' => 1, 'b' => 2, 'd' => 3);
    $finalarr = array();
    $arrkeys = array_merge(array_keys($array1), array_keys($array2));
    $arrkeys = array_unique($arrkeys);

    foreach($arrkeys as $key) {
        $finalarr[$key] = 0;

        if (isset($array1[$key])) {
            $finalarr[$key] += $array1[$key];
        }
        if (isset($array2[$key])) {
            $finalarr[$key] += $array2[$key];
        }
    }

    print_r($finalarr);
?>

答案 2 :(得分:0)

foreach($array1 as $key=>$value){
    if(isset($array2[$key])){
       $array1[$key] = $array1[$key] + $array2[$key];
       }
    }

不是最优雅的方式,它会使用array_walk或array_map,但我喜欢看到并确切知道发生了什么。这将为您提供所需的信息。

答案 3 :(得分:0)

首先将公共密钥的值相加,然后在另一个数组中添加其他密钥:

foreach ($array2 as $k2 => $a2){
   if (isset($array1[$k2])){
     $array1[$k2]+=$a2;
     unset($array2[$k2]);
   }
}
$array1 += $array2;

答案 4 :(得分:0)

类似的东西:

$result = array();

function ParseArray(array $array, array &$result)
{
    foreach ($array as $k => $v) {
        if (!array_key_exists($k, $result) {
            $result[$k] = $v;
        } else {
            $result[$k] += $v;
        }
    }
}

ParseArray($Array1, $result);
ParseArray($Array2, $result);

print_r($result);

您应该阅读PHP array functions

答案 5 :(得分:0)

$array1 = array(
    'a' => 1,
    'b' => 2,
    'c' => 3,
);

$array2 = array(
    'a' => 1,
    'b' => 1,
);

array_walk(
    $array1,
    function (&$value, $key) use ($array2) {
        $value += (isset($array2[$key])) ? $array2[$key] : 0;
    }
);
var_dump($array1);