2016-01-28 153 views
0

我试图从WoWProgress API中提取数据。我想在线解析数据,并直接解码它们,同时发布它们以供查看。我仍然在学习,但是我似乎遇到了这个数组的问题。真的需要一些帮助。JSON解析PHP的问题

$json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank"); 
if($json == false) 
{ 
throw new Exception("Failed To load infomation. Check setup options"); 
} 
$result = json_decode($json, true); 
echo "<pre>"; 
foreach ($result["realm_rank"] as $value) { 
    print_r($value); 
} 
echo "</pre>"; 

但所有我获得的是 “提供的foreach无效参数()”

更喜欢一些帮助。 在此先感谢!

对不起,我的英语。英语不是我的母语。

+0

看起来像'$ result [“realm_rank”]'是一个整数值,而不是数组。 –

+0

var_dump($ result); –

回答

1

$result['realm_rank']是一个字符串,而不是一个数组。

因此,foreach它是造成错误。

当数组未设置,或者为空或不是数组时,会导致此错误。

<?php 
$json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank"); 
if ($json == false) { 
throw new Exception("Failed To load infomation. Check setup options"); 
} 
$result = json_decode($json, true); 
if (isset($result['realm_rank'])) { 
    if (is_array($result['realm_rank'])) { 
    foreach ($result["realm_rank"] as $value) { 
    echo "<pre>"; 
    print_r($value); 
    echo "</pre>"; 
    } 
    } 
    else { 
    echo $result['realm_rank']; 
    } 
} 
else { 
echo 'Unknown error'; 
} 
?> 
0

$result["realm_rank"]不是一个数组,而是一个值。所以你不能通过foreach。

只要做到:

print_r($result["realm_rank"]); 

我想这和它的工作:

<?php 

$json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank"); 
if($json == false) 
{ 
throw new Exception("Failed To load infomation. Check setup options"); 
} 
$result = json_decode($json, true); 
echo "<pre>"; 
    print_r($result["realm_rank"]); 
echo "</pre>"; 
?> 
+0

但后来我得到了表空。 –

+0

粘贴上面的确切代码。它的工作 –

0

你$结果[ “realm_rank”]不是一个数组,而是一个整数。你不能迭代一个整数。

尽量简单地在打印:

print_r($result["realm_rank"]); 
0

$result的结果是提供的foreach此

print_r($result); 

Array 
(
    [score] => 750000 
    [world_rank] => 2117 
    [area_rank] => 1031 
    [realm_rank] => 44 
) 

无效的参数()指$result["realm_rank"]不是数组。

对于解决方案,您可以使用值:

foreach($result as $value) { 
    echo $value. "<br/>"; 
} 

或者只是使用

echo $result["realm_rank"]; 
0

除非特别需要通过值将其转换为一个数组进行循环,你可以保持它在默认的对象格式并通过名称直接访问值。

define('NL',PHP_EOL);/* only to prettify output */ 

$json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank"); 

if(!$json) { 
    throw new Exception("Failed To load infomation. Check setup options"); 
} 

$json = json_decode($json); 

echo '<pre>', 
    $json->score . NL, 
    $json->world_rank . NL, 
    $json->area_rank . NL, 
    $json->realm_rank . NL, 
    '<pre>';