2011-02-27 119 views
1

我正在研究一個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']; 
} 

任何幫助將大規模感激!

回答

1

我會做這個..

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

這樣我就不必有兩種迭代方法。

+0

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

+0

像夢一樣工作。謝謝! – 2011-02-27 10:38:59

0

什麼:

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

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

1

查看所有YQL結果集返回的值count。如果只有一個結果,那麼強制它是一個數組(有一個項目),就像有多個結果一樣。

所以,像...

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

這樣,你的腳本的其餘部分並不需要關心結果的結構。