PHP連想配列の結合でぐぬぬぬ (5.5.1)

array_merge() 関数で、マージする連想配列のキーが数字のみからなる文字列の場合、0 始まりの数値添え字に変わってしまった。

<?php
$array1 = array('ALL' => '全部');
$array2 = array('00000'=>'カツ丼', '11111'=>'牛丼', '22222'=>'親子丼');
$merge = array_merge($array1, $array2);
print_r($merge);
?>
Array
(
    [ALL] => 全部
    [00000] => カツ丼
    [0] => 牛丼
    [1] => 親子丼
)

ただし 0 の連続は扱いが違うみたい。

<?php
$array1 = array('ALL' => '全部');
$array2 = array('00000'=>'カツ丼', '000'=>'牛丼', '0000000000'=>'親子丼');
$merge = array_merge($array1, $array2);
print_r($merge);
?>
Array
(
    [ALL] => 全部
    [00000] => カツ丼
    [000] => 牛丼
    [0000000000] => 親子丼
)

+ 演算子で結合した場合は起きない。

<?php
$array1 = array('ALL' => '全部');
$array2 = array('00000'=>'カツ丼', '11111'=>'牛丼', '22222'=>'親子丼');
$merge = $array1 + $array2;
print_r($merge);
?>

この現象を確認したPHPのバージョンは5.5.1 (XAMPP)

c:\Users\xxx\Desktop>php -v
PHP 5.5.11 (cli) (built: Apr  8 2014 15:07:14)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans


追記

リファレンスに書いてあった。
http://php.net/manual/ja/function.array-merge.php

入力配列の中にある数値添字要素の添字の数値は、 結果の配列ではゼロから始まる連続した数値に置き換えられます。

二番目の配列の要素を最初の配列に追加したい (最初の配列に存在する要素は上書きせず、添字も変更しない) 場合は、配列結合演算子 + を使います。