2008-11-25 2 views
3

Я столкнулся с этой ошибкой, где элемент массива, если его индекс является строкой «0», недоступен.Это ошибка с доступом к массиву PHP?

Это не ошибка с unserialize, так как это произошло в моем коде, не вызвав его.

$arr = unserialize('a:1:{s:1:"0";i:5;}'); 
var_dump($arr["0"]); //should be 5, but is NULL 
var_dump($arr[0]); //maybe this would work? no. NULL 

Я делаю что-то неправильно здесь? Как получить доступ к этому элементу массива?

ответ

0

На самом деле, код в вашей доходности вопрос

int(5) 
+0

Какая версия? Я могу воспроизвести поведение Джона – 2008-11-25 04:06:59

+0

«5.2.6-2 + b1 с Suhosin-Patch 0.9.6.2» на debian – Draemon 2008-11-25 04:09:09

1

использование var_dump на структуру, чтобы увидеть, как это представлено. может быть, это поможет. Я делал то же самое в Perl, когда у меня были проблемы с этим: Data: Dumper

+0

Совет мудреца. Исследуйте сначала! – Draemon 2008-11-25 04:09:56

6

Да, похоже, что это ошибка, связанная с автоматическим преобразованием строк в целые числа PHP. Более подробная информация доступна здесь: http://bugs.php.net/bug.php?id=43614

var_dump($arr); // => array(1) { ["0"]=> int(5) } 
$arr2["0"]=5; 
var_dump($arr2); // => array(1) { [0]=> int(5) } 
print serialize($arr2); // a:1:{i:0;i:5;} 

Таким образом, кажется, что более старые версии PHP5 не выполняют индекс строки в целое преобразование индекса в десериализируются.

Эта ошибка была указана в PHP 5.2.5 и исправлена ​​в PHP 5.2.6 (см. http://www.php.net/ChangeLog-5.php#5.2.6).

Смежные вопросы