配列を結合する
連想配列のキーに数字のみの文字列を使用すると、キーは文字列ではなく整数になるパターンがある。
<?php var_dump( array( '1' => 'one', '02' => 'two', '0x3' => 'three', ' 4' => 'four' ) ); # array(4) { # [1]=> // これのこと # string(3) "one" # ["02"]=> # string(3) "two" # ["0x3"]=> # string(5) "three" # [" 4"]=> # string(4) "four" # }
そういう配列に対して array_merge() を使うと、予想外の動作になる。キーは保持されるものと思っていたのだが、新たに割り振られている。
<?php $ary1 = array('1' => 'one'); $ary2 = array('10' => 'ten'); var_dump( array_merge($ary1, $ary2) ); # array(2) { # [0]=> # string(3) "one" # [1]=> # string(3) "ten" # }
こういう配列を結合する場合は「+」を使うとうまく行く。
<?php $ary1 = array('1' => 'one'); $ary2 = array('10' => 'ten'); var_dump( $ary1 + $ary2 ); # array(2) { # [1]=> # string(3) "one" # [10]=> # string(3) "ten" # }
マニュアルをよく見るとこれらのことは書いてある。もっとよく読まないとなと思う次第。
でも、キーが数値になるという説明はすごくわかりにくいと思います。
$switching = array( 10, // key = 0 5 => 6, 3 => 7, 'a' => 4, 11, // key = 6 (最大の添字は5です) '8' => 2, // key = 8 (整数!) '02' => 77, // key = '02' 0 => 12 // 値10は12で上書きされます );PHP: 配列 - Manual
- 確認した PHP のバージョン
- 5.3.2-1ubuntu4.2