Php 显示类别的无限结构-->;子类别-->;等

Php 显示类别的无限结构-->;子类别-->;等,php,structure,hierarchy,categories,Php,Structure,Hierarchy,Categories,我想这是人们在构建任何类型的应用程序时的一个相当普遍的要求,这种应用程序依赖于分类和显示数据-任何CMS/论坛/购物车等,我一直在绞尽脑汁试图想出一种方法来显示所有分类及其子类,但毫无用处-我所管理的最好方法是while loop在while循环中(无论我认为我可能需要多少级别),但在我看来,这违背了编程的要点,它需要轻松地扩展 因此,鉴于: Category 1 -Sub cat -Sub cat --Sub sub cat --- Sub sub cat -- Sub sub cat -Su

我想这是人们在构建任何类型的应用程序时的一个相当普遍的要求,这种应用程序依赖于分类和显示数据-任何CMS/论坛/购物车等,我一直在绞尽脑汁试图想出一种方法来显示所有分类及其子类,但毫无用处-我所管理的最好方法是while loop在while循环中(无论我认为我可能需要多少级别),但在我看来,这违背了编程的要点,它需要轻松地扩展

因此,鉴于:

Category 1
-Sub cat
-Sub cat
--Sub sub cat
--- Sub sub cat
-- Sub sub cat
-Sub cat
Category 2
-Sub cat
-Sub cat
--Sub sub cat
---sub sub sub cat
----sub sub sub sub cat
-sub cat
Category 3
-Sub cat
数据库字段:ID名称ParentID

您将如何从数据库中回显其层次结构中的每个类别

我会发布我的代码,但考虑到嵌套循环的冗长方式,显然它是巨大的


我曾经考虑过编写一些代码来找到分类树的“深度”,但这仍然不能解决问题。。想法?

mysql网站上有一个相当不错的教程

如果您想阅读感兴趣的部分,请转到嵌套集模型的


坦率地说,我不认为有任何其他/更好的方法来存储层次结构数据。

作为提示,您可以使用递归。有关总体构思,请访问。也就是说,您编写了一个函数,用于获取和显示当前文件夹中的所有文件和文件夹。然后,对同一递归循环中的每个子文件夹重复应用相同的函数。等等等等。

你所说的结构本质上是一棵树。如果使用递归,则在树上迭代相对简单。我不知道您使用的是什么数据库访问代码,但您应该能够根据以下psuedocode进行相应的推断:

function iterate_tree(arr) {
    foreach (item in arr) {
        print item;
        iterate_tree(item.children);
    }
}

在英语中,这意味着在列表中打印一个项目,然后打印它的子项,一旦所有的子项(及其子项)都打印好,就转到列表中的下一个项目。

一个有趣的概念,老实说,我从来没有想到过这样的概念,我会玩一个游戏-非常感谢。)@克丽丝:如果你认为这个答案有助于你选择它作为答案。CheresI在我与其他作者完成任何后续查询后,我会选择正确的答案,别担心。@Chris:不,prolbem,我这么说是因为你似乎是新用户。:)啊,太好了。。。我的嵌套while循环已经完成了一半,这正是我最初想要的逻辑类型。谢谢D…我看了一篇嵌套层次结构mysql的文章,虽然它很有效,但对于它能实现什么,我似乎很冗长?我没有阅读嵌套集模型,因为我对mysql一点也不感兴趣。通常,使用ORM或通过将数据放入层次结构并以这种方式进行迭代,很容易获得父->子关系或子->父关系。决定你认为哪一个更好,然后去做。@Chris,归根结底,真正的问题是表现。如果您有很多树型数据,那么花额外的时间为数据库的适当形式的数据建模将是有益的。如果您需要执行大量类似于树的操作,它也将使您受益。如果层次结构中有100个左右的项目(我在那里随机选取了一个数字),那么将所有数据转换成代码并对其进行操作仍然很快,但没有在数据库中建模的复杂性。如果您只想显示您的数据,那么我编写的方法会很好,谢谢Josh,非常有用。:)