如何组合这两个数组,使键保持不变,但值由算术确定?
注意 - 根据我的示例,键可能并不总是在每个数组中排列:
$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];
您可以使用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
实际上不确定重复键的开销是大于还是小于检查唯一性的开销......
您可以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;
}