如何正确过滤?

时间:2016-01-14 09:22:05

标签: php arrays json api foreach

我想知道如何正确地过滤这样的结果。我正在做的事情导致了问题。很明显在单个项目的数组上使用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) {

    }

但是我得到了一个未定义索引:结果错误。

只有一个结果块的示例数据我的数据有多个

{
    "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中正确地获取数据。

3 个答案:

答案 0 :(得分: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的文档(希望存在)以获取有关返回数据的详细信息。

答案 1 :(得分:0)

http.post

附近的代码存在语法错误

改变
['results]

进入

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

foreach($obj['pages']['results'] as $brewery) { 数组中没有多个数组。那你为什么需要results呢?

无论如何,您可以通过提供准确的foreach来获得results的价值。

例如:INDEX

答案 2 :(得分:0)

添加额外的检查以查看所需的数据是否在数组中:

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