【发布时间】:2010-06-04 14:22:29
【问题描述】:
我有一个存储在数据库中的节点层次结构。我选择所有,将它们存储在一个数组中,然后遍历它们并在内存中创建一个嵌套数组。
输入看起来像这样:
[{name: A}, {name: B}, {name: X, parent: A}, {name: Y, parent: A}, {name: C}]
输出如下所示:
[{name: A, children:[{name: X}, {name: 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 插入其层次结构)
【问题讨论】:
-
我不明白你怎么会陷入无限循环。能否提供脚本代码或告诉我们脚本算法?
-
我在 do-while 循环中处理数组,这就是我很容易陷入无限循环的方式
标签: arrays sorting multidimensional-array hierarchical-data orphaned-objects