【发布时间】:2017-05-10 05:08:39
【问题描述】:
我需要解析如下所示的 JSON:
{
"mdfId":"282088127",
"mdfConcept":"ME 3400EG-12CS-M Switch",
"children":[
{
"mdfId":"007",
"mdfConcept":"Another item",
"children": [
// many more here
]
},
{
"mdfId":"008",
"mdfConcept":"Another one",
"children": [
{
"mdfId":"010",
"mdfConcept":"What I'm looking for!",
"children": [] // no children
}
]
},
// many more here
]
},
这是一个递归结构,其中每个元素都有mdfId、mdfConcept 和children 键。
假设我需要在这个结构中找到带有ID=010 的节点。我不知道它位于哪个级别(例如,它可以位于顶层,也可以位于下面的几个 children 节点)。
我目前的做法是:
$mdfId = '010'; // what I'm loking for
foreach ($jsonResponse as $category) {
while (true) {
if ($category['mdfId'] == $mdfId) {
// we found it!
$categoryDevices[$mdfId] = $category['children'];
break 2;
}
if (!empty($category['children'])) {
next_cat:
if (is_null($category['children'])) {
break;
}
$category = array_shift($category['children']);
continue;
}
if (empty($category['children'])) {
goto next_cat;
}
}
}
但目前的方法会遗漏一些情况。如何优化这个递归循环,以便它检查同一级别的所有节点,并且每个节点都可以通过任意数量的 children 键访问?
【问题讨论】: