【问题标题】:Cant get value in PHP array but var_dump shows that it exists无法在 PHP 数组中获取值,但 var_dump 显示它存在
【发布时间】:2014-05-13 08:43:21
【问题描述】:

很长一段时间,我的 PHP 应用程序运行在带有 apache 和 PHP 的 linux 服务器上。

现在我用 apache 和 php 建立了一个 windows 服务器,简单的 PHP 程序有问题。

var_dump($data);
die(var_dump($data['a']));

结果

object(stdClass)#1 (1) { ["a"]=> string(1) "b" } 
Fatal error: Cannot use object of type stdClass as array in BLUB.php on line 14

var_dump 表示有一个索引 a。 $data['a'] 为什么会抛出异常?

编辑:$data 是 json_decode($something);

【问题讨论】:

    标签: php arrays var-dump


    【解决方案1】:

    因为它是一个对象,而不是一个数组。你不能那样访问它。这是正确的:

    $data->a;
    

    【讨论】:

    • 为什么 PHP 会改变它?我想我的 linux 服务器上有旧版本的 PHP。 json_decode 总是产生一个数组。但我会尝试的。
    • 不知道,但你仍然可以得到一个数组。在这种情况下,您必须使用 json_decode($something, true);,然后您会收到一个数组,而不是一个对象。你可以在这里看到更多:php.net/manual/de/function.json-decode.php
    • 顺便问一下,谁对我投了反对票?这并不是说我真的在乎赞成票或反对票,但你至少可以告诉我我在哪里做错了,这样我就可以在未来改进它。
    • @DanielBrunner - PHP 没有改变任何东西(数组仍然是数组),他们添加了 东西(对象)
    • @DanielBrunner,你使用json_decode(),如果你传递第二个参数true,则返回对象或数组
    【解决方案2】:

    错误包含您的答案 - $data 实际上是 stdClass 类型的对象。你可以:

    a) 使用 $data->a 访问属性 'a' 要么 b) 使用 (array)$data 将 $data 类型转换为数组

    【讨论】:

    • 感谢您的想法!现在我只需要转换一次,就可以使用我的旧代码了。
    【解决方案3】:

    你应该使用:

     $data = json_decode($something, true);
    

    从json中获取数组

    【讨论】:

      【解决方案4】:

      正如错误所说,$data 是一个对象,而不是一个数组。因此,您希望使用对象访问,而不是数组访问。在这种情况下,那就是var_dump($data->a)

      【讨论】:

        【解决方案5】:

        由于$data 在对象中,您必须以这种方式访问​​它:

        $data->a;
        

        否则,您可以将其类型转换为数组并像访问数组一样访问它

        $dataArr = (array) $data;
        
        $dataArr['a'];
        

        注意

        这只有在你的对象属性是public时才有可能

        【讨论】:

          猜你喜欢
          • 2014-06-20
          • 2019-01-06
          • 2017-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-12
          • 2020-08-21
          相关资源
          最近更新 更多