2012-06-11 47 views
0

如何組合這兩個數組,以便使鍵保持不變,但是這些值是算術確定的?php組合陣列 - 關節增加值

注 - 每個陣列中的鍵可能不總是排隊,按我的例子:

$Array1 = ([4] => 100, [5] => 200, [6] => 100, [7] => 400); 
$Array2 = ([2] => 300, [5] => -100, [16] => -500,); 

所需的輸出:

$Array3 = ([2] => 300, [4] => 100, [5] => 100, [6] => 100, [7] => 400, [16] => -500); 

編輯:提高陣列突出爲什麼「的foreach」不會工作

+6

一個簡單的'foreach'應該可以工作。 – Hassan

+0

@TheShiftExchange對於上述簡單的數組,使用'foreach'很容易。也許你應該使用不同數量的元素來表示它不太容易。 – flowfree

+0

@哈桑 - 怎麼樣?因爲鑰匙可能並不排隊 - 所以我怎樣才能確保兩個陣列合併在一起 – Laurence

回答

6

您可以使用array_map此:

$Array3 = array_map(function($a,$b) {return $a+$b;},$Array1,$Array2); 

但是,只有當你在兩個數組中都有相同的鍵時(這在你的例子中你沒有),這纔會起作用。

如果這是一個問題,最簡單的解決辦法可能會是:

$allKeys = array_merge(array_keys($Array1),array_keys($Array2)); 
$Array3 = Array(); 
foreach($allKeys as $k) { 
    $Array3[$k] = (isset($Array1[$k]) ? $Array1[$k] : 0) 
       +(isset($Array2[$k]) ? $Array2[$k] : 0); 
} 

編輯剛剛意識到上面的代碼是不是最佳的。重寫:

$allKeys = array_unique(array_merge(array_keys($Array1),array_keys($Array2))); 
// rest of code as above 

其實不知道,如果重複鍵的開銷比檢查獨特的開銷更少或更多...

+0

多數民衆贊成真棒 - 作品完全一樣,因爲它應該 - 謝謝 – Laurence

4

可以foreach在每個陣列,並將它們添加到結果數組。

//$array3 = array(); 

//foreach($array1 as $k=>$v){ 
// $array3[$k] = $v; 
//} 

$array3 = $array1; 

foreach($array2 as $k=>$v){ 
    $array3[$k] = isset($array3[$k]) ? $array3[$k]+$v : $v; 
} 
+0

謝謝 - 這也適用,但我會用Kolinks答案 - 謝謝你的幫助 – Laurence

+0

爲什麼你需要第一個'foreach'循環嗎?難道你不能''array3 = $ array1;'? – nickb

+0

@nickb:是的,我想你可以:-P –