PHP中两个关联数组的合并和求和

PHP中两个关联数组的合并和求和,php,arrays,array-merge,Php,Arrays,Array Merge,考虑到这两个阵列: $first=array( 'books'=>1, 'videos'=>5, 'tapes'=>7, ); $second=array( 'books'=>3, 'videos'=>2, 'radios'=>4, 'rc cars'=>3, ); 我想把它们结合起来,这样我就可以 $third=array( 'books'=>4, 'videos'=>7, 'tapes'=>7, 'radios'=>4,

考虑到这两个阵列:

$first=array(
'books'=>1,
'videos'=>5,
'tapes'=>7,
);

$second=array(
'books'=>3,
'videos'=>2,
'radios'=>4,
'rc cars'=>3,
);
我想把它们结合起来,这样我就可以

$third=array(
'books'=>4,
'videos'=>7,
'tapes'=>7,
'radios'=>4,
'rc cars'=>3,
);

我在这里看到了一个函数:但它松开了键。

您可以使用以下内容:

function sum_associatve($arrays){
    $sum = array();
    foreach ($arrays as $array) {
        foreach ($array as $key => $value) {
            if (isset($sum[$key])) {
                $sum[$key] += $value;
            } else {
                $sum[$key] = $value;
            }
        }
    } 
    return $sum;
}
$third=sum_associatve(array($first,$second));

只是为了与众不同。。。使用
func\u get\u args()
,闭包并将参数强制为数组:

function sum_associative()
{
    $data = array();
    array_walk($args = func_get_args(), function (array $arg) use (&$data) {
        array_walk($arg, function ($value, $key) use (&$data) {
            if (isset($data[$key])) {
                $data[$key] += $value;
            } else {
                $data[$key] = $value;
            }
        });
    });

    return $data;
}

在您编辑之前,我已经测试了代码,它正在工作。让我也测试一下你的新代码。你也可以使用array\u merge,这会简单得多!看起来这样就行了。我将把它转换成一个函数。
array\u merge()
不会对值求和。对于重复键,它使用第二个数组中的值。