【追記】この記事に関連する新しい記事を投稿しました。
[php] 配列と配列を結合する時 [array]
[php] 配列と配列を結合する時 [array]
$arr1 = array_merge($arr1, $arr2);
とか
$arr1 += $arr2;
とかした時に、同一キーが存在した場合はどちらが生き残るのか…いつも忘れるので、φ(..)メモメモ
ソース
$a = array( 'a' => 'apple', 'b' => 'banana', 'c' => 'cherry', 'd' => 'durian', 'e' => 'elderberry', 'f' => 'fig', 'g' => 'grape'); $b = array( 'b' => 'BLANK', 'e' => 'EMPTY', 'n' => 'NOTHING'); echo '$a = ' . var_export($a, true) . ";\n"; echo '$b = ' . var_export($b, true) . ";\n\n"; $c = array_merge($a, $b); $d = array_merge($b, $a); echo '$c = ' . var_export($c, true) . ";\n"; echo '$d = ' . var_export($d, true) . ";\n\n"; $e = $a + $b; $f = $b + $a; echo '$e = ' . var_export($e, true) . ";\n"; echo '$f = ' . var_export($f, true) . ";\n\n";
実行結果
$a = array ( 'a' => 'apple', 'b' => 'banana', 'c' => 'cherry', 'd' => 'durian', 'e' => 'elderberry', 'f' => 'fig', 'g' => 'grape', ); $b = array ( 'b' => 'BLANK', 'e' => 'EMPTY', 'n' => 'NOTHING', ); // $c = array_merge($a, $b); $c = array ( 'a' => 'apple', 'b' => 'BLANK', 'c' => 'cherry', 'd' => 'durian', 'e' => 'EMPTY', 'f' => 'fig', 'g' => 'grape', 'n' => 'NOTHING', ); // $d = array_merge($b, $a); $d = array ( 'b' => 'banana', 'e' => 'elderberry', 'n' => 'NOTHING', 'a' => 'apple', 'c' => 'cherry', 'd' => 'durian', 'f' => 'fig', 'g' => 'grape', ); // $e = $a + $b; $e = array ( 'a' => 'apple', 'b' => 'banana', 'c' => 'cherry', 'd' => 'durian', 'e' => 'elderberry', 'f' => 'fig', 'g' => 'grape', 'n' => 'NOTHING', ); // $f = $b + $a; $f = array ( 'b' => 'BLANK', 'e' => 'EMPTY', 'n' => 'NOTHING', 'a' => 'apple', 'c' => 'cherry', 'd' => 'durian', 'f' => 'fig', 'g' => 'grape', );
考察
$arr1に$arr2をマージするとき、$arr1の値を保存したい場合は「+演算子」を、$arr2の値で上書きしたい場合は「array_merge()」を使用すると良いでしょう。
前者の場合で、array_merge($arr2,$arr1);とすれば望みは叶うものの、配列の順序がわちゃわちゃになってよろしくないでしょう(上記結果の"$d"のパターンですな)。
後者の場合でも同様("$f"のパターン)。
蛇足
$arr1 += $arr2;
っとか、配列を足し算しちゃうなんてところが「いかにもPHP」って感じで個人的に好きかも(*´ω`*)
でも、そういえば、この書き方って、$arr2の値で上書きしたい場合には使えないってことか…。