我使用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()返回的数据

如何读取这个数组中的值?


当前回答

改成

$results->fetch_array()

其他回答

我突然得到了这个错误,因为我的facebook登录突然停止工作(我也换了主机),并抛出了这个错误。修复真的很简单

问题出在这段代码中

  $response = (new FacebookRequest(
    FacebookSession::newAppSession($this->appId, $this->appSecret),
    'GET',
    '/oauth/access_token',
    $params
  ))->execute()->getResponse(true);

  if (isset($response['access_token'])) {       <---- this line gave error
    return new FacebookSession($response['access_token']);
  }

基本上,isset()函数期望一个数组,但它却找到一个对象。简单的解决方案是使用(array)量词将PHP对象转换为数组。下面是固定代码。

  $response = (array) (new FacebookRequest(
    FacebookSession::newAppSession($this->appId, $this->appSecret),
    'GET',
    '/oauth/access_token',
    $params
  ))->execute()->getResponse(true);

注意在第一行中使用了off array()量词。

当你试图访问它作为$result['context'],你把它作为一个数组,错误它告诉你,你实际上是在处理一个对象,那么你应该访问它作为$result->context

使用true作为json_decode的第二个参数。这将把json解码成一个关联数组,而不是stdObject实例:

$my_array = json_decode($my_json, true);

有关详细信息,请参阅文档。

使用json_decode的第二个参数使它返回一个数组:

$result = json_decode($data, true);

它不是数组,而是stdClass类型的对象。

你可以像这样访问它:

echo $oResult->context;

更多信息在这里:什么是stdClass在PHP?