4

我遇到了这个错误,其中数组的元素,如果它的索引是字符串“0”,是不可访问的。

这也不是反序列化的错误,因为这发生在我的代码中而没有调用它。

$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

我在这里做错了吗?如何访问数组的这个元素?

4

3 回答 3

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)。

于 2008-11-25T04:09:15.930 回答
1

在结构上使用 var_dump 来查看它是如何表示的。也许这会有所帮助。当我遇到 Data::Dumper 这样的问题时,我在 Perl 中做同样的事情

于 2008-11-25T04:07:53.407 回答
0

实际上,您问题中的代码会产生

int(5)
于 2008-11-25T04:03:10.657 回答