キーが数字のみの連想配列をarray_merge()すると、
キーが文字列ではなく整数扱いになりキーが変わってしまうことが有る。
例えば年を選択させるセレクトボックスのoptionを作るときとか。
<?php $year = array( '2014' => 2014, '2013' => 2013, '2012' => 2012, '2011' => 2011, ); $def = array( 'year' => 'year', ); var_dump( array_merge($def, $year) ); // 出力結果 # array (size=5) # 'year' => string 'year' # 0 => int 2014 # 1 => int 2013 # 2 => int 2012 # 3 => int 2011
キー整数で振り直されました。
こんな時は 、+演算子を使って配列をくっつけてしまうと、キーが保持される。
<?php $year = array( '2014' => 2014, '2013' => 2013, '2012' => 2012, '2011' => 2011, ); $def = array( 'year' => 'year', ); var_dump( $def + $year ); // 出力結果 # array (size=5) # 'year' => string 'year' # 2014 => int 2014 # 2013 => int 2013 # 2012 => int 2012 # 2011 => int 2011
+演算子で結合した時キーが被ってしまった場合は?
<?php $year = array( '2014' => 2014, '2013' => 2013, '2012' => 2012, '2011' => 2011, ); $def = array( '2013' => 'year', ); var_dump( $def + $year ); // 出力結果 # array (size=4) # 2013 => string 'year' # 2014 => int 2014 # 2012 => int 2012 # 2011 => int 2011
+演算子で配列結合した時と同じで先の配列の方が生きた状態に。
最近JSばかり触ってたのでPHP...忘れかけてるしちょっとメンドーにも感じる。