遍历一个可变的JSON数组

问题描述:

我正在研究一个Web应用程序,该Web应用程序使用Yahoo Query Language API从Web页面获取其数据以返回JSON数组。有时候我遇到了一个障碍,当页面上只有一个“比赛”时,数组设置不同,在某些情况下我无法遍历它。让我在一个例子中解释。遍历一个可变的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']; 
} 

任何帮助将大规模感激!

我会做这个..

如果(isset($阵列[ '格'] [0])!) $阵列['div'] = array($ array ['div']);

这样我就不必有两种迭代方法。

+0

有趣的方法。 – mailo 2011-02-27 10:34:08

+0

像梦一样工作。谢谢! – 2011-02-27 10:38:59

什么:

if (isset($result['div'][0])){ 
    //first iteration method 
} else{ 
    //second iteration method 
} 
+0

在第二个例子中,由于$ result ['div']数组中有3个元素(venue_id,venue_name和race_id),计数函数是否不返回“3”? – 2011-02-27 10:29:06

+0

对,我的坏,我改变了代码。 – mailo 2011-02-27 10:30:56

简单:

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程序员,如果您只需要打印。

查看所有YQL结果集返回的值count。如果只有一个结果,那么强制它是一个数组(有一个项目),就像有多个结果一样。

所以,像...

if ($yql['query']['count'] == 1) { 
    $yql['results']['data'] = array($yql['results']['data']); 
} 

这样,你的脚本的其余部分并不需要关心结果的结构。