这是PHP数组访问的错误吗?

时间:2008-11-25 03:51:25

标签: php arrays data-access

我遇到了这个错误,如果数组的索引是字符串“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

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

3 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:1)

在结构上使用var_dump来查看它的表示方式。也许这会有所帮助。当我遇到Data :: Dumper

这样的问题时,我在Perl中做了同样的事情

答案 2 :(得分:0)

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

int(5)