我有一个存储在数据库中的节点层次结构。我选择所有,将它们存储在一个数组中,然后遍历它们并在内存中创建一个嵌套数组。
输入如下所示:
[{name: A}, {name: B}, {name: X, parent: A}, {name: Y, parent: A}, {name: C}]
输出如下所示:
[{姓名:A,孩子:[{姓名:X},{姓名:Y}]},{B},{C}]
嵌套的深度没有限制。
我遇到的问题是,如果其中一条记录的父引用无效,则不能将其放入层次结构中,并且脚本以无限循环结束,试图找到父引用。
我敢打赌,有一种方法可以判断我何时陷入了无限循环。作为记录,当在循环中我意识到没有父项可以插入该项目时,我将项目推到数组的末尾,因为父项可能存在于该行中。
我想我应该能够意识到我一遍又一遍地循环相同的物品?
编辑 1 - 代码这是重要的一点:
$cnt = count($array);
do {
$item = array_shift($array);
if ($this->push($item)) {
$cnt--;
} else {
array_push($array, $item);
}
} while ($cnt > 0);
($this->push() 是一种尝试查找父对象的方法,如果成功,则将 $item 插入其层次结构中)