Я столкнулся с чем-то странным.Элемент массива доступа, индексированный с помощью числовой строки
У меня есть php-массив, индексированный цифровыми клавишами. Однако невозможно получить доступ к любому из элементов, поскольку php автоматически обрабатывает числовые строки как целые числа, вызывая недопустимое уведомление о смещении.
В нормальных условиях его невозможно создать массив php с числовыми индексами строк, но это может произойти с типом casting.
Для воспроизведения:
$object = new stdClass();
$object->{'1'} = 'one';
$array = (array) $object;
var_dump($array);
/* produces
array(1) {
["1"]=>
string(3) "one"
}
*/
//none of the following will work
$key = '1';
echo $array[1], $array['1'], $array["1"], $array[(string)1], $array[$key];
Является ли это просто случай ошибка края? Я только столкнулся с проблемой при попытке улучшить свой ответ на another SO question
Живой пример кода: http://codepad.viper-7.com/dFSlH1
Я думаю, что это происходит, когда вы конвертируете из объекта в массив. Потому что он работает нормально, если это ассоциативный массив. Пример: http://codepad.viper-7.com/wskYI9 –
также, если вы используете довольно беспорядочный 'json_decode (json_encode ($ object), true)' подход, эта проблема не происходит – Dale
Некоторая информация здесь http: //php.net/manual/en/language.types.array.php#language.types.array.casting – danjam