配列を結合する

連想配列のキーに数字のみの文字列を使用すると、キーは文字列ではなく整数になるパターンがある。

<?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