Это просто ёбаный пиздец. В мануале PHP напиcано, дескать, при образении к элементу массива, если строка содержит валидный интеджер, то тип данных будет интеджер. Также в интеджер превращаются булы и флоаты. Казалось бы, ничего страшного, да? $a["999"] и $a[999] одно и то же, и все этим спокойно пользуются, это один и тот же элемент массива. Но нет, всё не так. Зацените:
<?php
$a = new stdClass();
$a->{"1"} = 'foo';
$a = (array)$a;
$a["1"] = 'bar';
print_r($a);
Как думаете, что выводит? Неееееет :)
Array
(
[1] => foo
[1] => bar
)
Одна единичка - это строка, другая - это интеджер. Можно убедиться в том самостоятельно, скормив array_keys($a) в var_dump(). Наблюдалось мной лично в PHP 5.3.10, 5.4.31 и 5.5.3. Ох уж мне это похапе :)
Вот еще почему мне нравится python =)
ОтветитьУдалить