【问题标题】:iterating through a changeable JSON array遍历一个可变的 JSON 数组
【发布时间】:2011-07-05 04:39:20
【问题描述】:

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

任何帮助将不胜感激!

【问题讨论】:

    标签: php arrays json codeigniter yql


    【解决方案1】:

    查看与所有 YQL 结果集一起返回的 count 值。如果只有一个结果,则强制它为一个数组(有一项),就像有多个结果时一样。

    所以,像……

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

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

    【讨论】:

      【解决方案2】:

      就这么简单:

      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 as $race) 会使您的程序对其他php 程序员更具可读性。

      【讨论】:

        【解决方案3】:

        怎么样:

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

        【讨论】:

        • 在第二个例子的情况下,由于$result['div']数组中有3个元素(venue_id、venue_name和race_id),count函数会不会返回“3”?跨度>
        【解决方案4】:

        我会这样做..

        if(!isset($array['div'][0])) $array['div'] = array($array['div']);

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-20
          • 2011-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-03
          • 2019-09-15
          相关资源
          最近更新 更多