k01ken’s b10g

He110 W0r1d!

PHPの配列と連想配列のキーがバッティングするとどうなるか?について

開発環境は、Windows 7 Professional(32bit)+XAMPP v3.22+PHP 7.1.7。

例えば、以下のような配列を、$a[0]で呼び出すと、13と表示される。

<?php
	$a = [13];
	echo $a[0];

?>


次に、以下を、配列ではなく連想配列として、キーを0にし、値を設定して、$a[0]で呼び出すと、12と表示される。

<?php
	$a = [0 => 12];
	echo $a[0];

?>


では、1つの変数の中に、同じものがあった場合は、どちらが表示されるのか?
以下の場合、$a[0]では、13ではなく、12が表示される。そして、$a[1]で表示しようとすると、Notice: Undefined offset: 1と表示される。

<?php
	$a = [13,0 => 12];
	echo $a[0];
?>

そこで、変数$aをprint_rで表示させてみると、
Array ( [0] => 12 )
のように表示された。配列のキーが連想配列のキーに上書きされてしまった。


次に、配列の要素を逆にしてみると、以下は、$a[0]では、12が表示され、$a[1]では13が表示される。print_rで表示させてみると、Array ( [0] => 12 [1] => 13 ) と表示された。

<?php
	$a = [0 => 12,13];
	echo $a[0];
?>