致命错误:不能将字符串偏移量用作数组?

时间:2014-01-17 08:35:10

标签: php arrays loops foreach

在我的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不是那么好。有人可以帮忙吗?

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

试试这个。在第99行,你最后不应该使用, ......

 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.    }

答案 2 :(得分:0)

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

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;
}

答案 3 :(得分:0)

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