2012-06-11 51 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 –