どもです。
2つの連想配列を合体させる場合、一般的に考える手段は array_merge($array1, $array2) だと思います。
しかしこのarray_merge()、「数値添字要素の添字の数値は、 結果の配列ではゼロから始まる連続した数値に置き換える」という性質を持っています。
この性質により、連想配列のキーが数字の場合、キーが変更されてしまうのです。
$array1 = array(
'A1' => 'A',
2 => 'B',
);
$array2 = array(
'2' => 'C',
);
print_r(array_merge($array1, $array2));
⇒
Array
(
[A1] => A
[0] => B
[2] => C
)
PHPは自動的に型変換することがあるため、文字列型のつもりでいたキーが数値型になっていて、array_merge() でキーが変わってしまった…なんてことが起こります。起こりました。(実話)
では、どう対応すればといえば、array_merge() ではなく $array + $array にすることです。
$array1 = array(
'A1' => 'A',
2 => 'B',
);
$array2 = array(
'2' => 'C',
);
print_r($array1 + $array2);
⇒
Array
(
[A1] => A
[2] => B
)
$array + $array の場合、キーを再配布されることがないので、想定した通りの動きになると思います。
どういった動作をさせたいのかにもよりますが、基本的には連想配列の合成は array_merge() より $array + $array の方が安牌です。
$array1 = array('A'=> 1 );
$array2 = array('A'=> 2 );
print_r(array_merge($array1, $array2)); //Array ( [A] => 2 )
print_r($array1 + $array2); //Array ( [A] => 1 )
なお、合成する配列に同じキーが存在していた場合、array_merge() は後の配列が、$array + $array は前の配列が優先されます。