生成所有类别的子类别

时间:2011-08-27 22:01:52

标签: php submenu

如果我有一段这样的代码:

$get_categories = mysql_query("SELECT * FROM categories");
$categories = mysql_fetch_assoc($get_categories);

类别表包含所有不同的类别及其子类别及其子类别等。

我如何制作一些生成如下列表的PHP代码:

Main Category
-Sub Category
- -Sub Sub Category
- -Sub Sub Category
- - -Sub Sub Sub Category etc
-Sub Category
Main Category

所有类别及其子类别及其子类别等的列表。

如果没有为每个子类别级别创建一个while循环,我无法看到我能做什么(这是愚蠢的,因为我必须创建50个级别以确保它有效,如果我有50个级别的子类别)。

我希望我有道理。

由于

2 个答案:

答案 0 :(得分:2)

我无法想到如何不循环每个级别的解决方案。如果不使用元数据和静态结构,则递归是不可避免的。

这样的表结构允许任意类别树。

CREATE TABLE `categories` (
    `id` int(8) NOT NULL auto_increment,
    `parent_id` int(8) NOT NULL,
    `name` varchar(25) NOT NULL
    PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

INSERT INTO categorires (parent_id,name) VALUES (0,'Hardware');
INSERT INTO categorires (parent_id,name) VALUES (1,'Harddrives');
INSERT INTO categorires (parent_id,name) VALUES (2,'IDE');
INSERT INTO categorires (parent_id,name) VALUES (2,'SATA');
INSERT INTO categorires (parent_id,name) VALUES (0,'Memory');

渲染结构:

+Hardware
    +Harddrives
        +IDE
        +SATA
+Memory

PHP:

function renderCategoryTree($categories){
    foreach($categories as $category){
        if(is_array($category))
            renderCategoryTree($category);
        else
            echo "+$category";
    }
}

答案 1 :(得分:1)