現在PHPの勉強中ですが、下記の内容の違いがよくわかりません。分かる方がおられましたら教えて下さい。
lang
1$array1 = array('color'=>'赤', 'shape'=>'丸'); 2$array2 = array('color'=>'緑', 'shape'=>'長方形'); 3 4<1> 5$merge1 = array_merge($array1, $array2); 6 7<2> 8$merge2 = $array1 + $array2;
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
初めましてrmyekcwさん、回答失礼いたします。
array_mergeによる配列の結合と、+演算子による配列の結合の違いを
教えてくださいとのことですが、わかる限りでお答えさせていただきたいと思います。
まず、根本的な違いとしては、kenshiroさんが仰っているように、重複しているキーの対応だと思います。
こちらについては、kenshiroさまが、詳細にお答えしてるので、簡単なコードを載せるだけにしておきます。
lang
1<?php 2 3 $array1 = array('color'=>'赤', 'shape'=>'丸'); 4 $array2 = array('color'=>'緑', 'shape'=>'長方形'); 5 6 $merge1 = array_merge($array1,$array2); 7 var_dump($merge1); 8 // ["color"]=> 9 // string(3) "緑" 10 // ["shape"]=> 11 // string(9) "長方形" 12 13 $merge2 = $array1 + $array2; 14 var_dump($merge2); 15 // ["color"]=> 16 // string(3) "赤" 17 // ["shape"]=> 18 // string(3) "丸" 19?>
これも同じく重複するキーへの対応になるのですが、
上の例で示したような、連想配列ではなく通常の配列、
数値が添字の配列に対する挙動についてお書きしたいと思います。
lang
1<? 2 $array1 = array('赤','丸'); 3 $array2 = array('緑','長方形'); 4 5 $merge1 = array_merge($array1,$array2); 6 var_dump($merge1); 7 // [0]=> 8 // string(3) "緑" 9 // [1]=> 10 // string(9) "長方形" 11 // [2]=> 12 // string(3) "赤" 13 // [3]=> 14 // string(3) "丸" 15 16 $merge2 = $array1 + $array2; 17 var_dump($merge2); 18 // [0]=> 19 // string(3) "緑" 20 // [1]=> 21 // string(9) "長方形" 22?>
こちらのコードの配列は、細かく書くと以下のようになります。
lang
1 $array1 = array([0] => '赤', [1] => '丸'); 2 $array2 = array([0] => '緑', [1] => '長方形');
+演算子を使って数値添字の配列を結合させると、
そのまま上書きしてしまうため、以下のようになってしまう。
// [0]=> // string(3) "緑" // [1]=> // string(9) "長方形"
それに対して、array_mergeで数値添字の配列を結合させると、
結合後、数値添字を0から順に割り振って、全ての値を保持してくれる。
// [0]=> // string(3) "緑" // [1]=> // string(9) "長方形" // [2]=> // string(3) "赤" // [3]=> // string(3) "丸"
以上の様に些細な挙動の変化はありますが、
それほど致命的な差異はないので、どちらでも、
気に入った方を使っていけばいいのではないでしょうか。
投稿2014/10/27 15:27
総合スコア113
0
下記の配列の場合
lang
1$array1 = array('color'=>'赤', 'shape'=>'丸'); 2$array2 = array('color'=>'緑', 'shape'=>'長方形'); 3
2つの内容の違いは、array_merge関数は二つの配列の結合を取ります。重複しているキーは上書きされます。
lang
1Array 2( 3[color] => 緑 4[shape] => 長方形 5)
「+」の演算子の場合は、二つの配列を結合になります。最初の配列のキーはそのまま残ります。
両方の配列に同じキーが存在する場合は最初の配列のものが残り、 二番目の配列の内容は無視されます。
lang
1Array 2( 3[color] => 赤 4[shape] => 丸 5)
投稿2014/10/20 07:30
総合スコア407
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。