2016-01-14 59 views
0

我想知道如何正確地過濾這樣的結果。我所做的事情會導致問題。顯然,對一個數組使用單個項目的foreach並不理想,但我不知道如何以其他方式來完成。如何正確過濾?

// connect with the static file 
    $json = file_get_contents('resources/assets/datafeeds/brewery_single.json'); 
    $obj = json_decode($json, true); 

    // create brewery info 
    foreach($obj['pages'] as $brewery) { 
     foreach($brewery['results'] as $brewery) { 

     } 
    } 

我試着做這樣的事情:

foreach($obj['pages']['results'] as $brewery) { 

    } 

但我得到一個未定義指數:導致 errror這樣。

只有一個結果框實例數據,我的數據有多個:

{ 
    "apiName": "brewery_single", 
    "apiGuid": "d74e8aa2-4064-44b9-81de-2ceb150882c0", 
    "generatedAt": 1452761620, 
    "pages": [ 
     { 
      "pageUrl": "http://www.brewery-website.com", 
      "results": [ 
       { 
        "website": "www.brewery.com/", 
        "plaats": "Place", 
        "latlong": [ 
         "53.657856", 
         "5.032597" 
        ], 
        "naam": "Brouwerij title", 
        "provincie": "Noord Brabant", 
        "afbeelding": "http://www.brewery.com/images/brewery/brewer.jpg", 
        "actief": "Yes", 
        "land": "Netherlands", 
        "adres": "<p><b>Adres:</b><br />Street 40 <br />2388 GP<br /> Province, Netherlands </p>", 
        "opgericht": "1990" 
       } 
      ] 
     }, 
    ] 
} 

希望有人能幫助我,所以我可以正確地從一個API獲取我的數據。

+0

你得到了什麼確切的錯誤?第二個代碼片段是否正確?你錯過了一個單引號... – Blaatpraat

+0

這是正確的,我的codebase我在這裏更新它。抱歉。我得到一個未定義的索引:結果 –

+0

你讓它成爲一個對象,所以你應該使用' - >'而不是'['']' – Peter

回答

2

好像pages可能多頁的陣列,其中每個包含results數組的潛在多個結果。所以實際上,兩個環是爲了:

foreach ($obj['pages'] as $page) { 
    foreach ($page['results'] as $brewery) { 
     ... 
    } 
} 

如果你只在第一個結果永遠有興趣,你可以嘗試直接訪問它:

if (isset($obj['pages'][0]['results'][0])) { 
    echo $obj['pages'][0]['results'][0]['plaats']; 
} 

但同樣,這點數據結構似乎是爲了說明多個結果,所以如果你只考慮第一個結果,你可能會錯過一些信息。

有關返回數據的詳細信息,請參閱該API的文檔(希望存在該文檔)。

+0

結果數組只包含一個結果,所以這工作正常。感謝您的幫助。這使我指出了正確的方向 –

0

。在你的代碼語法錯誤附近['results]

變化從

foreach($obj['pages']['results] as $brewery) { 

foreach($obj['pages']['results'] as $brewery) { 

有一個在results陣列沒有多個陣列。那麼爲什麼你需要foreach呢?

反正你可以通過提供確切的INDEX得到價值results

例如:echo $obj['pages']['results]['website'];

+0

對不起,我在我的文章中更新了它,在我的代碼庫中是正確的我在這裏輸入了錯誤。 –

+0

@Hassaan:它是一個數組,但在代碼片段中只包含1個條目。 Foreach是有效的...... – Blaatpraat

+0

@Hassaan,那麼我如何從數組中正確地獲取數據?你有沒有例子? –

0

添加額外的檢查,看看是否你想要的數據是數組中:

if (isset($obj['pages'])) { 
    foreach($obj['pages'] as $brewery) { 
     if (isset($brewery['results'])) { 
      foreach($brewery['results'] as $brewery) { 
      } 
     } 
    } 
}