我有这个问题,API响应我的DEPARTURESEGMENT有时只包含一个对象,有时包含一个对象数组。根据具体情况,我似乎在我的foreach循环中需要不同的逻辑。如何迭代JSON属性不知道它是否是数组?
响应答:
{
"getdeparturesresult":{
"departuresegment":[{
"departure":{
"location":{
"@id":"7461018",
"@x":"12.523958",
"@y":"57.938402",
"name":"Noltorps centrum"
},
"datetime":"2014-12-04 23:05"
},
"direction":"Alingsås station",
"segmentid":{
"mot":{
"@displaytype":"B",
"@type":"BLT",
"#text":"Buss"
},
"carrier":{
"name":"Västtrafik",
"url":"http://www.vasttrafik.se/",
"id":"279",
"number":"1"
}
}
},
{
"departure":{
"location":{
"@id":"7461018",
"@x":"12.523958",
"@y":"57.938402",
"name":"Noltorps centrum"
},
"datetime":"2014-12-04 23:05"
},
"direction":"Alingsås station",
"segmentid":{
"mot":{
"@displaytype":"B",
"@type":"BLT",
"#text":"Buss"
},
"carrier":{
"name":"Västtrafik",
"url":"http://www.vasttrafik.se/",
"id":"279",
"number":"1"
}
}
}
]
}
}
与这个循环运行:
foreach ($apiData->getdeparturesresult->departuresegment as $m) {
虽然这种反应B:
{
"getdeparturesresult":{
"departuresegment":{
"departure":{
"location":{
"@id":"7461018",
"@x":"12.523958",
"@y":"57.938402",
"name":"Noltorps centrum"
},
"datetime":"2014-12-04 23:05"
},
"direction":"Alingsås station",
"segmentid":{
"mot":{
"@displaytype":"B",
"@type":"BLT",
"#text":"Buss"
},
"carrier":{
"name":"Västtrafik",
"url":"http://www.vasttrafik.se/",
"id":"279",
"number":"1"
}
}
}
}
}
需要像这样的环路(否则它会引发错误) :
foreach ($apiData->getdeparturesresult as $m) {
有没有一种方法来编写循环failsafe是否DEPARTURESEGMENT是一个对象的数组还是只有一个对象(括号[]是唯一的区别json结构的权利?)或者我必须以某种方式测试并首先查看DEPARTURESEGMENT是否为数组,并根据结果分派到两个不同的循环?
这实际上就是我要做的,如果它是在PHP中的标准方法。不过,我觉得这个功能在我需要的每个对象/控制器中都包含这个功能太麻烦了。所以我看到了你的方法的天才,但这次我选择了不同的解决方案。 – 2014-12-05 10:58:31