【发布时间】:2013-04-22 13:14:51
【问题描述】:
我是 PHP 新手,我正在学习从 xml 和 json 文件中检索一些动态数据。我制作了两个代码来做两件不同的事情。第一个是 xml 游戏列表数据,如下所示:
https://steamcommunity.com/id/aksn1p3r/games?tab=all&xml=1
我想做的是结合两种获取数据的方式,从那个 xml 获取数据,然后使用变量 $appid 从另一个 json 数据源获取更多信息,然后再迭代下一个 $gdata。
<?php
$glist = 'https://steamcommunity.com/id/aksn1p3r/games?tab=all&xml=1';
$gxml = simplexml_load_file($glist);
foreach($gxml->games->game as $game) {
$appid = $game->appID;
$glink = $game->storeLink;
$gname = $game->name;
$glogo = $game->logo;
echo '<p>'. $appid . ' <a href="'. $glink .'">'. $gname .'<br>';
echo '<img src="'. $glogo .'" /></a></p>';
}
?>
这是一个 json:[http://store.steampowered.com/api/appdetails/?appids=8870],它是使用名为 $appid 的变量构造的强>。
我希望它在上述循环中的下一次迭代之前构造一个新链接,然后从 json 源中获取 price aka $gprice,如下所示:
<?php
$appid = '8870';
$ht = 'http://store.steampowered.com/api/appdetails/?appids=' . $appid;
$fgc = file_get_contents($ht);
$jd = json_decode($fgc, true);
$gdata = $jd[$appid]['data'];
$gprice = $gdata['price_overview']['final'];
$price = number_format($gprice / 100, 2);
echo 'Price: $' .$price;
?>
这是我尝试组合它的方式,但它挂起或出错。
<?php
$glist = 'https://steamcommunity.com/id/aksn1p3r/games?tab=all&xml=1';
$gxml = simplexml_load_file($glist);
foreach($gxml->games->game as $game) {
$appid = $game->appID;
$glink = $game->storeLink;
$gname = $game->name;
$glogo = $game->logo;
echo '<p>'. $appid . ': <a href="'. $glink .'">'. $gname .'<br>';
echo '<img src="'. $glogo .'" /></a><br>';
$gjson = 'http://store.steampowered.com/api/appdetails/?appids=' . $appid;
$fgc = file_get_contents($gjson);
$jd = json_decode($fgc, true);
$gdata = $jd[$appid]['data'];
$gprice = $gdata['price_overview']['final'];
$price = number_format($gprice / 100, 2);
echo 'Price: $' .$price. '</p>';
}
?>
我希望它使用 $appid 每个循环来构建到源的链接:$gjson,然后是 file_get_contents($gjson) ; 获取数据,然后在继续下一项之前回显该 $gprice。
我犯的任何指示或错误,请帮助我使其正常工作?
【问题讨论】:
-
it hangs or errors- 您是否收到任何错误消息?您可能需要检查是否配置了足够的错误报告 (php.net/manual/en/function.error-reporting.php)。另外,我通常发现print_r在调试时非常有用(php.net/manual/en/function.print-r.php)。 -
error_reporting(E_ALL) 和 ini_set("display_errors",1); ...显示什么?还有 file_get_contents() 错误?
-
警告:第 27 行 /steamgame.php 中的非法偏移类型在我的代码中,第 27 行是这一行:
$jd = json_decode($fgc, true); $gdata = $jd[$appid]['data']; -
您会收到错误消息,因为
$appid不是字符串。将其转换为字符串:(string) $appid(与您使用的 simplexmlelement 一起使用)。这是一个常见的错误,如果您知道如何解决,则很容易解决。积极处理错误报告和错误记录,因为 PHP 会告诉您在哪里可以找到(潜在)问题。
标签: php xml json variables foreach