【问题标题】:Fatal error: Cannot use string offset as an array?致命错误:不能将字符串偏移量用作数组?
【发布时间】:2014-01-17 08:35:10
【问题描述】:

在我的 foreach 中,我看到以下错误:

致命错误:不能将字符串偏移量用作数组 [..] 第 97 行

 88.    foreach ($response as $result) {
 89.        if($result['provider'] == 'Facebook') {
 90.            $provider = 'facebook';
 91.        }else{
 92.            $provider = 'twitter';
 93.        }
 94.        $user = array(
 95.            'provider' => $result['provider'],
 96.            'id' => $result['uid'],
 97.            'name' => $result['info']['name'],
 98.            'image' => $result['info']['image'],
 99.            'link' => $result['info']['urls'][$provider],
100.        );
101.        echo "<h1>".$user['provider']."</h1>";
102.        echo "<p>".$user['id']."</p>";
103.        echo '<p><img src="'.$user['image'].'" /></p>';
105.        echo "<p>".$user['name']."</p>";
106.        echo "<p>".$user['link']."</p>";
107.    }

我尝试在网上阅读以了解问题所在,但似乎有些问题与我的无关。我也应该拿出它,让你知道我对 PHP 不是很好。有人可以帮忙吗?

附注我在最后一个回声之后添加了break; 并解决了它,但我认为这不是解决问题的方法。

【问题讨论】:

  • var_dump($response) 的输出是什么;或 var_dump($result['provider']);
  • 做一个$result['info']的var_dump。可能不包含代码建议的内容。
  • @rccoros var_dump($result['provider'] 返回 string(1) "2"。这很奇怪。
  • 这意味着 $response 是字符串而不是数组
  • @sanjeev is_array($response);返回真。

标签: php arrays loops foreach


【解决方案1】:

您在循环中使用了$result['info']。有时应该是 $result['info'] 的子数组未设置。 看来您不需要运行循环。因为您一次将拥有单个用户信息。 或者你可以像这样使用 break:

foreach ($response as $result) {
    $provider = strtolower($result['provider']);
    $user = array(
        'provider' => $result['provider'],
        'id' => $result['uid'],
        'name' => isset($result['info']['name']) ? $result['info']['name'] : '',
        'image' => isset($result['info']['image']) ? $result['info']['image'] : '',
        'link' => isset($result['info']['urls'][$provider]) ? $result['info']['urls'][$provider] : ''
    );
print_r($user);
    echo "<h1>" . $user['provider'] . "</h1>";
    echo "<p>" . $user['id'] . "</p>";
    echo '<p><img src="' . $user['image'] . '" /></p>';
    echo "<p>" . $user['name'] . "</p>";
    echo "<p>" . $user['link'] . "</p>";
    break;
}

【讨论】:

  • @Chris Burton:我已经更新了我的答案。你现在可以试试这个吗?
  • @Chris Burton : 你能把这行删掉并测试它是否有效,然后我会尝试不同的方法
  • 我只是想指出问题在于 foreach 循环。在最后一个回显之后添加break; 只需删除foreach并使用$result = $response['auth'];同样有效。
【解决方案2】:

$result['info'] 显然是字符串而不是数组。

【讨论】:

    【解决方案3】:

    您在某处将 $result['info'] 声明为字符串,然后尝试将其用作数组。尝试 var_dump $result['info']。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多