PHP为现有数组值添加值

时间:2011-04-21 20:14:37

标签: php arrays

我目前有两个数组,每个数组中的键都是产品ID,而值是数量:

$array_1 = ([10] => 1, [13] => 3, [27] => 1, [32] => 2);
$array_2 = ([8] => 1, [10] => 1, [12] => 1, [20] => 2, [27] => 1);

我想组合两个数组,但将值添加到键匹配的位置。有没有一种方法可以在不迭代数组的情况下执行此操作?

5 个答案:

答案 0 :(得分:4)

以下是我对将两个数组合并在一起的最短路径的看法。可能有一个我不知道的内置函数,但它会将两个数组合并到$array_1

foreach($array_1 as $k => $v)
    foreach($array_2 as $i => $j)
        if($k == $i) {
            $array_1[$k] = $v + $j;
            break;
        }

发现时编辑break

编辑 - (感谢KC)

foreach($array_1 as $k => $v)
    if(isset($array_2[$k])) {
        $array_1[$k] += $array_2[$k];
        unset($array_2[$k]);
    }

foreach($array_2 as $k => $v)
    $array_1[$k] = $v;

答案 1 :(得分:3)

PHP本机数组函数提供了一些分割和分组数组的方法,但是无法添加(array_sum并没有帮助)。

因此,虽然我们在推荐您没有特别要求的解决方案,但这里有一个较短的解决方案:

foreach ($array_2 as $i=>$k) {
    $array_1[$i] += $k;
}

答案 2 :(得分:1)

“没有迭代”没有。即使你把它们包装成array_map这样的函数它的迭代(它只在代码本身中不可见;)

$result = array_merge_recursive($array_1, $array_2);

在唯一键上,这将保留原样。在两个相同的键上,它将两个值合并为一个数组。 PHP5.3中的一个很好的解决方案

$result = array_map (function ($item) {
   return is_array($item) 
     ? $item[0] + $item[1]
     : $item;
 }, $result);

非5.3解决方案也不是那么难看

foreach ($result as &$item) {
  if (is_array($item)) $item = $item[0] + $item[1];
}

更新

如果我现在阅读你的问题,我怀疑,我理解你的意思是“将价值加在一起”。真正添加产品ID和数量没有多大意义。但是,只需将上面的+替换为您需要的操作:)

答案 3 :(得分:1)

您可以使用内置的数组合并功能。

array_merge(数组1,数组2,ARRAY3 ...);

在这里使用您的阵列名称就是这样做的 array_merge($array_1 , $array_1);

答案 4 :(得分:0)

这是功能:

<?php
    function merge($array1, $array2)
    {

        if(sizeof($array1)>sizeof($array2))
        {
            echo $size = sizeof($array1);
        }else{
            $a = $array1;
            $array1 = $array2;
            $array2 = $a;

            echo $size = sizeof($array1);
        }

        $keys2 = array_keys($array2);

        for($i = 0;$i<$size;$i++)
        {
            $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]];
        }

        $array1 = array_filter($array1);
        return $array1;
    }

?>

取自Here
,在我看来是最完美的解决方案。