Это ошибка с доступом к массиву PHP? - PullRequest
3 голосов
/ 25 ноября 2008

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

Это также не ошибка 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

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

Ответы [ 3 ]

6 голосов
/ 25 ноября 2008

Да, похоже, это ошибка, связанная с автоматическим преобразованием строк 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).

1 голос
/ 25 ноября 2008

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

0 голосов
/ 25 ноября 2008

На самом деле, код в вашем вопросе дает

int(5)
...