ちょっと用語を整理しておきます。
このサイトだけの定義ですが、配列の添え字はキー、数字がキーの配列はインデックス型配列、文字列がキーの配列は連想配列と呼ぶことにします。 単に配列という場合は PHP の配列のことです。
PHP の配列は マップでインデックス型配列と連想配列を表現しているわけなんですが そのためか、キーが数字のみの文字列だったり、小数を含んだ数値だったりすると、変換されてしまうケースがあります。
キーに小数を含んだ数値を指定すると、小数部分が切捨てられ 整数部分のみキーとして使用されます。
$a[3.1] = "aaaa"; print_r($a);
Array
(
[3] => aaaa
)
キーにはマイナスの数値も指定できますが その場合も同様です。
$a[-2.5] = "bbbbb"; print_r($a);
Array
(
[-2] => bbbbb
)
次のようにすると、配列が上書きされてしまいます。
$a[3.1] = "3.1"; $a[3.2] = "3.2"; print_r($a);
Array
(
[3] => 3.2
)
キーに数字のみの文字列を指定すると 数値に変換されてインデックス型配列になります。
$a["13"] = "13a";
print_r($a);
Array
(
[13] => 13a
)
マイナスの場合も同様ですが、小数を含んだ数値の場合は 文字列として扱われます。
$a["-13"] = "13b"; $a["2.5"] = "2.5b"; print_r($a);
Array ( [-13] => 13a ["2.5"] => 2.5b )
1 つの配列に インデックス型配列と連想配列を混在させる場合 (あまり無いと思いますが) 文字列でキーを指定したつもりが 数値のキーを上書きしてしまうかもしれないので 注意が必要です。
オマケです。
$a[TRUE] = "TRUE"; $a[FALSE] = "FALSE"; $a[NULL] = "NULL"; print_r($a);
Array ( [1] => TRUE [0] => FALSE [""] => NULL )