2016-01-14 62 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) { 
      } 
     } 
    } 
}