我正在开发一个Web应用程序,它使用Yahoo Query Language API从网页获取数据,以返回JSON数组。有时,当页面上只有一个“竞赛”时,我遇到了一个阻塞,数组设置不同,在某些情况下我无法迭代它。让我在一个例子中解释。
多场比赛的网页数组布局
Array (
[div] => array (
[0] => array (
['venue_id'] = 02222
['venue_name'] = 'Hove'
['race_id'] = 9222
)
[1] => array (
['venue_id'] = 03333
['venue_name'] = 'Romford'
['race_id'] = 2442
)
//...and so on
)
)
只有一个种族的网页的数组布局
Array (
[div] => array (
['venue_id'] = 02222
['venue_name'] = 'Hove'
['race_id'] = 9222
)
)
在应用程序中,我正在使用一个简单的foreach语句来遍历数组。但是,这显然不适用于第二个例子,我需要一个解决方法。
foreach声明示例
foreach($result['div'] as $race) {
echo 'Venue ID: '.$race['venue_id'];
echo 'Venue Name: '.$race['venue_name'];
echo 'Race ID: '.$race['race_id'];
}
任何帮助都会受到大力赞赏!
丹
答案 0 :(得分:1)
我会这样做..
如果(!isset($阵列[ '的div'] [0])) $ array ['div'] = array($ array ['div']);
这样我就不必拥有两种迭代方法。
答案 1 :(得分:1)
查看所有YQL结果集返回的count
值。如果只有一个结果,那么强制它成为一个数组(带有一个项目),就像有多个结果一样。
所以,像......
if ($yql['query']['count'] == 1) {
$yql['results']['data'] = array($yql['results']['data']);
}
这样,脚本的其余部分不需要关心结果的结构。
答案 2 :(得分:0)
怎么样:
if ( isset($result['div'][0])){
//first iteration method
} else{
//second iteration method
}
答案 3 :(得分:0)
简单如下:
function format_race($race) {
echo 'Venue ID: '.$race['venue_id'];
echo 'Venue Name: '.$race['venue_name'];
echo 'Race ID: '.$race['race_id']
}
if (isset($result['div']['venue_id'])) {
format_race($result);
} else {
array_map('format_race', $result);
}
这也有一个优点,就是在外部函数中抽象数据操作,这在许多情况下都很方便。
请注意,我在这里滥用了一些array_map,可能使用foreach($ result作为$ race)会让你的程序对其他php程序员更具可读性,如果您只需要打印就可以了。