Самое смешное, вы получите точно такой же результат.
PHP (по любой причине) проверяет, содержит ли строка, используемая в качестве индекса массива, только цифры. Если это так, строка преобразуется в int или double.
<?php
$x=array(); $x['0'] = 'foo';
var_dump($x);
$x=array(); $x[0] = 'foo';
var_dump($x);
Для обоих массивов вы получаете [0] => foo, а не ["0"] => foo.
Или другой тест:
<?php
$x = array();
$x[0] = 'a';
$x['1'] = 'b';
$x['01'] = 'c';
$x['foo'] = 'd';</p>
<p>foreach( $x as $k=>$v ) {
echo $k, ' ', gettype($k), "\n";
}
0 integer
<b>1 integer</b>
01 string
foo string
Если вы все еще не верите, посмотрите на #define HANDLE_NUMERIC (key, length, func) в zend_hash.h и когда и где он используется.
Вы думаете, что это странно? Выберите номер и встаньте в очередь ...