迭代一个可更改的JSON数组

时间:2011-02-27 10:19:40

标签: php arrays json codeigniter yql

我正在开发一个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'];
}

任何帮助都会受到大力赞赏!

4 个答案:

答案 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程序员更具可读性,如果您只需要打印就可以了。