-3

对其中的另一个感到抱歉。

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

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

4

3 回答 3

3

您必须首先获取 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 />";
}
于 2013-02-20T18:50:52.703 回答
1

你的数组不够深。你所拥有的是:

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

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

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

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

于 2013-02-20T18:59:51.910 回答
0

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

就像是:

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

尝试查看 cURL http://php.net/manual/en/book.curl.php以了解获取 URL 内容的另一种方法。

于 2013-02-20T18:51:57.050 回答