【问题标题】:Displaying Unlimited Structure of Categories --> Subcategories --> etc?显示类别的无限结构->子类别->等?
【发布时间】:2011-06-02 10:36:20
【问题描述】:

我想这是人们在构建任何类型的依赖于分类和显示数据的应用程序时相当普遍的要求 - 任何 CMS/论坛/购物车等,我一直在努力尝试想办法显示所有类别及其子级无济于事 - 我管理过的最好的方法是 while 循环内的 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 名称 ParentIDS

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

我会发布我的代码,但显然它的庞大,考虑到嵌套循环的长期方式。

我考虑过编写一些代码来找到类别树的“深度”,但这仍然没有削减它.. 想法?

【问题讨论】:

    标签: php structure hierarchy categories


    【解决方案1】:

    您所说的结构本质上是一棵树。如果使用递归,遍历树相对简单。我不知道您使用的是什么数据库访问代码,但您应该能够从以下伪代码中相应推断:

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

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

    【讨论】:

    • 啊,这很好......我的嵌套 while 循环已经完成了一半,这正是我最初的目标逻辑类型。谢谢。 :D ...我查看了嵌套层次结构的 mysql 文章,虽然它有效,但它似乎很冗长,可以实现什么?
    • 我没有阅读嵌套集模型,因为我对 MySql 一点也不感兴趣。使用 ORM 或通过将数据放入层次结构并以这种方式迭代它通常很容易获得父->子或子->父关系。决定你认为哪个更好,然后去做。
    • @Chris,真正归结为性能。如果您有大量的树形数据,那么花费额外的时间以适当的数据库形式对数据进行建模将是有益的。如果你需要做很多类似树的操作,它也会让你受益。如果您在层次结构中有 100 个左右(我在那里选择了一个随机数)项目,那么将所有数据转换为代码并在那里进行操作仍然很快,但没有在数据库中建模的复杂性。如果你只是想显示你的数据,那么我写的方法就可以了,
    • 谢谢乔希,真的很有帮助。 :)
    【解决方案2】:

    作为提示,您可以使用 Recursion 。一般想法可在http://en.wikipedia.org/wiki/Recursion 获得。 IE。您编写的函数可以抓取并显示当前文件夹中的所有文件和文件夹。然后,您在同一递归循环中重复为每个子文件夹应用相同的函数。等等等等等等。

    【讨论】:

      【解决方案3】:

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

      http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 如果您想阅读有趣的部分,请转到The Nested Set Model

      坦率地说,我认为没有其他/更好的方式来存储分层数据。

      【讨论】:

      • 一个有趣的概念,老实说,我从来没有想过这样的概念,我会有一个剧本 - 非常感谢。 :)
      • @Chris:如果您认为这个答案帮助您认为选择它作为答案。干杯
      • 我会在完成与其他作者的任何后续查询后选择正确答案,别担心。
      • @Chris:没问题,我这么说是因为您似乎是新用户。 :)
      猜你喜欢
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2011-09-12
      • 2011-07-14
      相关资源
      最近更新 更多