127

かなり単純な質問です。次の違いは何ですか:

$merged = array_merge($array1, $array2);

$merged = $array1 + $array2;

?

4

9 に答える 9

77

違いは次のとおりです。

+演算子は 2 つの配列の和集合を取りますが、関数array_mergeは和集合を取りますが、重複するキーは上書きされます。

于 2011-03-22T16:05:41.867 に答える
58

array_merge()入力配列で見つかったすべての数値キーが、結果の配列で再インデックス化されます。ユニオン演算子+は再インデックスを引き起こしません。

于 2011-03-22T16:06:18.183 に答える
23

+ 記号は、配列キーの最初の出現からの値のみを取ります。
array_merge は、配列キーの最後の発生から値を取得します。

例:

$first = ['a'=>'one',
        'b'=>'two',
        'c'=>'three'];

$second = ['a'=>'fourth',
        'b'=>'fifth',
        'c'=>'sixth',
        '3'=>'number three'];

$merged = $first + $second;
echo "<pre> plus sign merge\n";
var_dump($merged);

$merged = array_merge($first,$second);
echo "\n array_merge function merge\n";
var_dump($merged);

これは以下を出力します:

プラス記号 マージ
配列(4) {
["a"]=>
文字列(3) "1"
["b"]=>
文字列(3) "2"
["c"]=>
文字列(5) "3"
[3]=>
string(12) "ナンバースリー"
}

array_merge function merge
array(4) {
["a"]=>
string(6) "4番目"
["b"]=>
string(5) "5番目"
["c"]=>
string(5) "6番目"
[0]=>
string(12) "ナンバー 3"
}

これで注目すべき興味深い点は、 がarray_merge実際には数字 3 の '3' インデックスを消去していることです。これは文字列ですが、数字であるためです。

したがってarray_merge、数値インデックスを持つ配列とマージするときは注意してください。鍵を紛失する可能性があります。それらが重要な場合は、それらの前に文字列を付けます。

代わりに次の'3' => 'three'ようなものを使用します'_3' => 'three'

于 2016-02-15T10:25:26.390 に答える
6

重複したnon_numericarray_mergeキーを上書きする一方で、上書き$array1 + $array2しないと思います。

于 2011-03-22T16:07:01.687 に答える