1 回答

TA贡献1843条经验 获得超7个赞
为了避免无限循环的错误,当某些元素的子元素具有 parent_id 时,您可以使用第三个参数来列出所有已管理的 id。如果一个 id 在你的治疗中回来,你可以抛出一个异常:
function buildTree(array $elements, $parentId = 0, $managedParent = []) {
$branch = array();
// Add new id in list of managed ids
$managedParent[] =$parentId;
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
// check id not already managed
if(in_array($element['id'], $managedParent))
{
// in this case children are already a parent of same structure. Throw an Excpetion
throw new \Exception('Invalid structure given');
}
$children = buildTree($elements, $element['id'], $managedParent);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
- 1 回答
- 0 关注
- 76 浏览
添加回答
举报