なんか思ってたより癖があったので書いておく

[ PHP 7.2.4 ]

普通にマニュアルに載ってます

負の数はアリ

コード
$arr = [];

$arr[1] = 'A';
$arr[0] = 'B';
$arr[-1] = 'C';

var_dump($arr);
実行結果
array(3) {
  [1]=>
  string(1) "A"
  [0]=>
  string(1) "B"
  [-1]=>
  string(1) "C"
}

整数の文字列はintegerにキャストされる

03 は正しい整数の文字列として扱われないのでキャストされない

コード
$arr = [];

$arr[1] = 'A';
$arr['1'] = 'AA';

$arr[0] = 'B';
$arr['0'] = 'BB';

$arr[-1] = 'C';
$arr['-1'] = 'CC';

$arr[03] = 'D';
$arr['03'] = 'DD';

var_dump($arr);
実行結果
array(5) {
  [1]=>
  string(2) "AA"
  [0]=>
  string(2) "BB"
  [-1]=>
  string(2) "CC"
  [3]=>
  string(1) "D"
  ["03"]=>
  string(2) "DD"
}

floatはintegerにキャストされる

コード
$arr = [];

$arr[0] = 'A';

$arr[0.4] = 'B';
$arr['0.4'] = 'BB';

$arr[0.6] = 'C';
$arr['0.6'] = 'CC';

var_dump($arr);
実行結果
array(3) {
  [0]=>
  string(1) "C"
  ["0.4"]=>
  string(2) "BB"
  ["0.6"]=>
  string(2) "CC"
}

boolはintegerにキャストされる

コード
$arr = [];

$arr[true] = 'X';
$arr['true'] = 'XX';

$arr[false] = 'Y';
$arr['false'] = 'YY';

var_dump($arr);
実行結果
array(4) {
  [1]=>
  string(1) "X"
  ["true"]=>
  string(2) "XX"
  [0]=>
  string(1) "Y"
  ["false"]=>
  string(2) "YY"
}

nullはカラ文字として扱われる

コード
$arr[''] = 'Z';
$arr[null] = 'ZZ';

var_dump($arr);
実行結果
array(1) {
  [""]=>
  string(2) "ZZ"
}