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