配列の足し算(array_mergeと+演算子)備忘録

配列の足し算(array_mergeと+演算子)備忘録

ついに師走ですね。私事ですが風邪を引きました、ichikawaです。
本日は、配列の足し算をする2種類の方法、「array_merge」と「+演算子」の違いをご紹介したいと思います。
既にあちこちで取り上げられている話題ですが、忘れていた部分があったので自分への備忘録も含めてのご紹介です。(PHPのバージョン:5.2.11)

「array_merge」と「+演算子」

まず「array_merge」ってなに?「+演算子」って何??な方はマニュアルをご覧ください。

「+演算子」の結合

まず「+演算子」の結合を見てみましょう

$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); 
$result = $a + $b;
print_r($result);

上記の足し算の結果は以下の通りです。

Array ( [a] => apple [b] => banana [c] => cherry ) 

+ 演算子は、 右側の配列の要素のうち、左側の配列に存在しないキーのものを左側の配列に追加します。 重複しているキーは上書き「されません」。 (マニュアルより)

なので、$bのキーと同じキーを持つ$aの要素($a["a"] と $a["b"])は上書きされませんでした。
「c」というキーは$aにはなかったので、それだけ追加されたわけです。

「array_merge」の結合

次は「array_merge」の結合です。

$a = array("a" => "apple", "b" => "banana", 0 => 'null', 1 => 'eins');
$b = array("a" => "pear", "b" => "strawberry", 1 => "one"); 
$result = array_merge($a, $b);
print_r($result);

上記の結果は以下の通りです。

Array ( [a] => pear [b] => strawberry [0] => null [1] => eins [2] => one ) 

入力配列が同じキー文字列を有していた場合、そのキーに関する後に指定された値が、 前の値を上書きします。しかし、配列が同じ添字番号を有していても 値は追記されるため、このようなことは起きません。 (マニュアルより)

結合したい2つの配列のキーが同じ場合、数字か文字列かによって挙動が変わります。
配列のキーが数字の場合には、キーが変更されて値が追加されます。
$b[1]は、「1」というキーが$aにあったため、値は追加されましたがキーは変更になりました。
キーが文字列(連想配列)の場合には、値が上書きされます。
$a[a]と$a[b]は、$b[a]と$b[b]に上書きされたというわけです。

「array_merge」と「+演算子」の違いまとめ

  • 「+演算子」はキーが同じだと上書きされない
  • 「array_merge」はキーが同じで文字列だと上書き、数字だとキーを変えて追記

詳しくはマニュアルをご覧ください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ