我目前有两个数组,每个数组中的键都是产品ID,而值是数量:
$array_1 = ([10] => 1, [13] => 3, [27] => 1, [32] => 2);
$array_2 = ([8] => 1, [10] => 1, [12] => 1, [20] => 2, [27] => 1);
我想组合两个数组,但将值添加到键匹配的位置。有没有一种方法可以在不迭代数组的情况下执行此操作?
答案 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
,在我看来是最完美的解决方案。