0

これら 2 つの配列を結合して、キーは同じままで、値は算術的に決定されるようにするにはどうすればよいですか?

注 - 私の例によると、キーは常に各配列に並ぶとは限りません。

$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」が機能しない理由を強調します

4

2 に答える 2

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

実際には、繰り返されるキーのオーバーヘッドが一意性チェックのオーバーヘッドよりも多いか少ないかはわかりません...

于 2012-06-11T01:28:33.513 に答える
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;
}
于 2012-06-11T01:31:37.607 に答える