さいしょに
PHPの配列を結合させる際に、+演算子とarray_mergeの違いを区別できていなかったのでまとめ。
内容はかなり初心者向けです。
どのように使い分けるか
結合させたい配列のkeyに重複があったときの処理をどうしたいかで使い分けが変わります。
+演算子
keyに重複があった場合には値を上書きしない。
keyを指定していない場合にも、適用される。
array_merge
keyに重複があった場合には値を上書きする。
keyを指定していない場合には、1つ目の配列の後に2つ目の配列が結合される。
理解していないとこんなことが起こり得る
keyを指定していな場合にも、+演算子でうまく結合してくれると思ってるパターン
$array1 = ['hoge1','hoge2','hoge3'];
$array2 = ['fuga1','fuga2','fuga3'];
$res = $array1 + $array2; //[0]=> "hoge1" [1]=> "hoge2" [2]=> "hoge3"??
array1の後ろにarray2を結合させようと思っても、両方ともkeyが[0],[1],[2]と重複しているため、元のarray1の値が変わらなくなってしまう。
keyが重複していても最初の配列の後ろに結合してくれると思ってるパターン
$array1 = ['key1' => 'val1', 'key2' => 'val2'];
$array2 = ['key1' => 'hoge', 'key2' => 'fuga'];
$res = array_merge($array1, $array2); //["key1"]=> "hoge" ["key2"]=>"fuga"??
てっきり最初の配列の後に次の配列が結合されると思っていると、keyの重複があったときに上書きされてることに気がつけない。
keyを指定していないけど、keyが重複しているから値が上書きされると思ってるパターン
$array1 = ['hoge1','hoge2','hoge3'];
$array2 = ['fuga1','fuga2','fuga3'];
$res = array_merge($array1, $array2); //[0]=> "hoge1" [1]=> "hoge2" [2]=> "hoge3" [3]=> "fuga1" [4]=> "fuga2" [5]=> "fuga3"??
この例だとarray2をそのまま使えよとなるけど、一応。