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
入力配列の中にある数値添字要素の添字の数値は、 結果の配列ではゼロから始まる連続した数値に置き換えられます。
二番目の配列の要素を最初の配列に追加したい (最初の配列に存在する要素は上書きせず、添字も変更しない) 場合は、配列結合演算子 + を使います。