我如何组合这两个数组,以便键保持不变,但值是由算术确定的?
注意 - 根据我的示例,每个数组中的键可能并不总是对齐:
$Array1 = ([4] => 100, [5] => 200, [6] => 100, [7] => 400 );
$Array2 = ([2] => 300, [5] => -100, [16] => -500, );
Run Code Online (Sandbox Code Playgroud)
期望的输出:
$Array3 = ([2] => 300, [4] => 100, [5] => 100, [6] => 100, [7] => 400, [16] => -500);
Run Code Online (Sandbox Code Playgroud)
编辑:改进数组以突出"foreach"无法工作的原因
你可以使用array_map这个:
$Array3 = array_map(function($a,$b) {return $a+$b;},$Array1,$Array2);
Run Code Online (Sandbox Code Playgroud)
但是,只有在两个数组中都有相同的键时才会起作用(在您的示例中,您没有).
如果这是一个问题,最简单的解决方法可能是:
$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);
}
Run Code Online (Sandbox Code Playgroud)
编辑刚刚意识到上面的代码并不是最优的.重写:
$allKeys = array_unique(array_merge(array_keys($Array1),array_keys($Array2)));
// rest of code as above
Run Code Online (Sandbox Code Playgroud)
实际上不确定重复键的开销是否多于或少于检查唯一性的开销......