Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php组合数组-按顺序添加值_Php_Arrays - Fatal编程技术网

php组合数组-按顺序添加值

php组合数组-按顺序添加值,php,arrays,Php,Arrays,如何组合这两个数组,使键保持不变,但值是由算术确定的 注意-根据我的示例,键可能并不总是在每个数组中对齐: $Array1 = ([4] => 100, [5] => 200, [6] => 100, [7] => 400 ); $Array2 = ([2] => 300, [5] => -100, [16] => -500, ); 期望输出: $Array3 = ([2] => 300, [4] => 100, [5] => 10

如何组合这两个数组,使键保持不变,但值是由算术确定的

注意-根据我的示例,键可能并不总是在每个数组中对齐:

$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无法工作的原因

您可以使用它:

$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;
}

一个简单的foreach应该可以工作。@对于上面这样的简单数组,使用foreach很容易。也许你应该使用不同元素数的数组来表示这并不容易。@Hassan-how?因为键可能不对齐-所以我如何确保两个数组都是组合的?谢谢你的帮助-这也行,但我会使用Kolinks回答-为什么你需要第一个foreach循环?你就不能做$array3=$array1@是的,我想你可以