我使用 json_decode()
得到一个奇怪的错误 . 它正确解码数据(我使用 print_r
看到它),但是当我尝试访问数组中的信息时,我得到:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
我只是试图这样做: $result['context']
其中 $result
有 json_decode()
返回的数据
如何读取此数组中的值?
13 回答
使用json_decode的第二个参数使其返回一个数组:
函数json_decode()默认返回一个对象 .
您可以像这样访问数据:
如果您有
from-date
之类的标识符(使用上述方法时连字符会导致PHP错误)您必须编写:如果你想要一个数组,你可以这样做:
或者将对象强制转换为数组:
您必须使用 -> 来访问它,因为它是一个对象 .
更改您的代码:
至:
使用
true
作为json_decode
的第二个参数 . 这会将json解码为关联数组而不是stdObject
实例:有关详细信息,请参阅the documentation .
今天有同样的问题,这样解决了:
如果您调用
json_decode($somestring)
,您将获得一个Object,您需要访问$object->key
,但是如果您调用json_decode($somestring, true)
,您将获得一个字典,并且可以像$array['key']
一样访问它不是数组,它是stdClass类型的对象 .
您可以像这样访问它:
更多信息:What is stdClass in PHP?
正如 Php Manual 所说,
当我们使用
json_decode();
时,我们得到一个stdClass类型的对象作为返回类型 . 要在print_r()
内传递的参数应该是数组或字符串 . 因此,我们无法传递print_r()
内的对象 . 我找到了两种方法来解决这个问题 .这可以如下实现 .
如前所述,当您使用
json_decode();
函数时,它返回一个stdClass的Object . 您可以在->
Operator的帮助下访问对象的元素 .一,如果对象具有嵌套数组,也可以使用多个键来提取子元素 .
他们也是
print_r()
的其他选择,如var_dump();
和var_export();
P.S :另外,如果将
json_decode();
的第二个参数设置为true
,它会自动将对象转换为array();
Here are some references:
http://php.net/manual/en/function.print-r.php
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
您可以将stdClass对象转换为数组,如:
stdClsss to array
这是函数签名:
当param为false(默认值)时,它将返回适当的php类型 . 您使用object.method范例获取该类型的值 .
当param为true时,它将返回关联数组 .
它会在出错时返回NULL .
如果要通过数组获取值,请将assoc设置为true .
当你尝试以
$result['context']
的形式访问它时,你将它视为一个数组,它告诉你实际上正在处理一个对象的错误,那么你应该以$result->context
的形式访问它而不是使用括号使用对象运算符,例如,基于数据库对象的数组在名为DB的类中创建如下:
访问我在控制器脚本上使用此代码的信息:
然后显示我检查的信息,看看是否已设置servicecalls并且计数大于0,记住它不是我引用的数组,所以我使用对象运算符“ - >”访问记录,如下所示:
我突然得到了这个错误,因为我的facebook登录突然停止工作(我也更改了主机)并抛出了这个错误 . 修复非常简单
问题在于此代码
基本上isset()函数期望一个数组,但它找到一个对象 . 简单的解决方案是使用 (array) 量词将PHP对象转换为数组 . 以下是固定代码 .
Note the use off array() quantifier in first line.
改变它