PHP通过JSON循环


PHP Loop through JSON

很抱歉又发生了这样的事情。

json以以下格式返回:

{
   "data":{
      "internalName":"hotshotgg",
      "name":"HotshotGG",
      "acctId":434582,
      "profileIconId":531,
      "revisionDate":"'/Date(1357002079809)'/",
      "summonerLevel":30,
      "summonerId":407750
   },
   "success":true
}

也可以在这里看到:http://elophant.com/developers/docs/summoner

数据返回正确:

Array ( 
    [data] => Array ( 
        [internalName] => nemonorm 
        [name] => nemonorm 
        [acctId] => 28685607 
        [profileIconId] => 544 
        [revisionDate] => /Date(1361354064000)/ 
        [summonerLevel] => 30 
        [summonerId] => 24286314 
    ) 
    [success] => 1 
)

我似乎无法循环浏览并打印出我想要的信息:

$decode= json_decode($url, true);
foreach($decode['data'] as $key => $value) {
    echo  $value['name'] . " <br />";
}

很确定这是显而易见的。。。但是我看不见。

您必须首先获取URL的内容,例如使用curl:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
$decode = json_decode($json, true);

最重要的是,你似乎预料到了错误的数据结构。如果你想回显data.name,那么你必须访问它。如果你想回显所有的数据,那么你需要循环。

// echo the name only:
echo $decode['data']['name'];
// echo all data
foreach($decode['data'] as $key => $value) {
   echo $key . ": " . $value . "<br />";
}

您的数组不够深。您拥有的是:

Array (
    [data] => Array (
        [internalName] => nemonorm
        ...
    ) [success] => 1
)

当你循环$decoded〔'data〕时,你得到的值是单独的变量,而不是数组。我的意思是$value是一个字符串,而不是数组,所以$value['name']是没有意义的。你需要的是:

Array (
    [data] => Array (
        [0] => Array (
            [internalName] => nemonorm
            ...
        )
    ) [success] => 1
)

然后,您将遍历一个结果数组,而不是单个结果的值。

很难用我们所掌握的信息来判断,但$url是url的内容,还是只是实际的url?您需要先获取内容,然后再对其调用json_decode。

类似于:

$json = file_get_contents($url);
$decoded = json_decode($json, true);

尝试查看cURLhttp://php.net/manual/en/book.curl.php用于获得URL的内容的另一种方法。