ど素人から毛を生やす。<延>

[PHP]連想配列を合成するには array_merge() か $array + $array か

Web > PHP 2023年7月21日(最終更新:3月前)

どもです。
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 は前の配列が優先されます。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)