【问题标题】:Is this a bug with PHP array accessing?这是 PHP 数组访问的错误吗?
【发布时间】:2010-09-23 21:34:00
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays data-access


    【解决方案1】:

    是的,它看起来好像是一个错误,与 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 在 unserialize 中并没有执行字符串索引到整数索引的转换。

    此错误已在 PHP 5.2.5 中报告,并已在 PHP 5.2.6 中修复(请参阅 http://www.php.net/ChangeLog-5.php#5.2.6)。

    【讨论】:

    • 没有说是什么时候修复的,但是明显是在我使用的版本之前:)
    • 赢家。谢谢。现在我们可以将标题改回“这是 PHP 中的错误吗?”或类似的东西
    • 嗯...我使用的是 5.2.5,它坏了。你的意思是它在 5.2.6 中修复了吗?
    • 如何在 5.2.6 版之前排除这个基本问题?这真是令人兴奋
    • 对不起,我认为 5.2.5 是报告该错误的版本:(
    【解决方案2】:

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

    【讨论】:

    • 圣人建议。先调查!
    • 我做到了,但这确实是php 上的一个错误
    【解决方案3】:

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

    int(5)
    

    【讨论】:

    • 哪个版本?我可以重现约翰的行为
    • "5.2.6-2+b1 with Suhosin-Patch 0.9.6.2" 在 debian 上
    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多