我現在有兩個數組,在每個關鍵是產品ID,而值是數量:PHP的附加價值,以現有的數組值
$array_1 = ([10] => 1, [13] => 3, [27] => 1, [32] => 2);
$array_2 = ([8] => 1, [10] => 1, [12] => 1, [20] => 2, [27] => 1);
我想這兩個陣列相結合,但加值一起在鑰匙匹配。有沒有一種方法可以不通過數組遍歷?
我現在有兩個數組,在每個關鍵是產品ID,而值是數量:PHP的附加價值,以現有的數組值
$array_1 = ([10] => 1, [13] => 3, [27] => 1, [32] => 2);
$array_2 = ([8] => 1, [10] => 1, [12] => 1, [20] => 2, [27] => 1);
我想這兩個陣列相結合,但加值一起在鑰匙匹配。有沒有一種方法可以不通過數組遍歷?
以下是我對將兩個數組合並在一起的最短途徑的看法。可能有一個我不知道的內置函數,但它會將兩個數組合併到$array_1
中。
foreach($array_1 as $k => $v)
foreach($array_2 as $i => $j)
if($k == $i) {
$array_1[$k] = $v + $j;
break;
}
EDIT-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;
'n * m'在最壞的情況下?($ array_1 as $ k => $ v){if(isset($ array_2 [$ key])){/ * add * /} else {/ * not add * /}'是什麼?感覺效率更高。您可以取消已經找到的'$ array_2'中的鍵。剩下的'$ array_2'是「未觸動過的鍵」 – KingCrunch 2011-04-21 20:29:43
由於我的問題的答案是'不',我已經拿出上面KC的建議。 – 2011-04-21 20:44:00
我坐正確的:) – 2011-04-21 21:06:43
「不反覆」 沒有。即使你包裝他們進入的功能,如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和數量並沒有多大意義。但是,只需將上面的+
替換爲需要的操作即可:)
PHP本地數組函數提供了幾種拆分和組合數組的方法,但不能添加(array_sum
並不真正幫助) 。
所以雖然我們在建議您特別沒有要求的解決方案,這裏有一個較短的一個:
foreach ($array_2 as $i=>$k) {
$array_1[$i] += $k;
}
這是功能:採取
<?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
和在我看來,這是最完美的解決方案。
這假設,相應的鍵_really_存在於_both_數組中。 – KingCrunch 2011-04-21 20:32:34
您可以使用內置的數組合並函數。 (數組1,數組2,數組3);
這裏使用陣列的名字是你怎麼做 array_merge($array_1 , $array_1);
總之,沒有。你將不得不迭代。 PHP的內部合併函數只在合併時檢查衝突,但不會對所有值進行合併。 – 2011-04-21 20:17:34