我正在阅读以下文章,http://articles.sitepoint.com/article/hierarchical-data-database/2关于“在数据库中存储分层数据”。
这是在讨论这些结构。 http://sitepointstatic.com/graphics/sitepoint_numbering.gif和http://sitepointstatic.com/graphics/table02.gif
我不明白以下段落。这些是什么意思。
“每次从节点的子节点开始,都会将该节点的正确值添加到堆栈中。”
和
“当您完成显示节点时,您将从堆栈中删除其正确的值。如果计算堆栈中的元素,您将获得当前节点的级别。”< / EM>
我希望有人在可能的情况下以更简单的方式解释这些。
要显示树形结构,请注意儿童 应略微缩进 他们的父母。我们可以做到这一点 保持一堆正确的价值观。每 你从一个孩子开始的时间 节点,您添加正确的值 节点到堆栈。你知道的 该节点的孩子有权利 小于正确的价值 父母的价值,所以通过比较 当前节点的正确值 使用堆栈中的最后一个节点, 你可以看看你是否还在显示 那个父母的孩子。什么时候 你完成了一个节点的显示 从堆栈中删除其正确的值。 如果计算中的元素 堆栈,你会得到的水平 当前节点。
答案 0 :(得分:2)
他们试图想出一种方法来使用嵌套集来按树中的级别缩进数据。
Food (1,12)
|
+--Fruit (2,11)
|
+--Red (3,6)
| |
| +--Cherry (4,5)
|
+--Yellow (7,10)
|
+--Banana (8,9)
因此,当您获取行时,将rgt
数字推送到数组的末尾:
$right[] = $row['rgt'];
当您处理子项和子项时,此数组会增长。例如,当我们到达“Cherry”时,数组看起来像这样:
array(11, 6, 5)
只要我们沿着树的一个分支下降,其中的rgt
值应该越来越少,因为孩子的rgt
值总是小于其父rgt
值。 }值。
我们处理的下一行是“黄色”,其rgt
值为10.此值10 更大比数组中的最后一个值,这意味着我们不是再往下走一个分支,我们就在另一个分支上。我们需要从数组中弹出数字,直到10不再大于数组中的最后一个数字。
array(11, 6) // 10 is still greater than 6
array(11) // 10 is not greater than 11, so stop
现在我们知道数组只包含当前行“黄色”的祖先。
树中的级别始终等于该数组中的元素数。