PHP无限分类

——顶级分类下面有子分类,子分类下面又有孙分类,子子孙孙无穷尽也

顶级分类下面有子分类,子分类下面又有孙分类,子子孙孙无穷尽也。

怎么让这个分类功能支持无限个,说是无限,其实也是有限。算法可以无限,实际使用中总是有限,毕竟计算机的内存是有限的。

无限分类实现如下:

<?php

function tree_list($list,$p_id = 0,$p_field='p_id'){

    //用于保存整理好的分类节点

    $tree = [];

    // 循环所有分类

    foreach ($list as $key => $value) {

        // 如果当前分类的父id等于要寻找的父id则写入$tree 数组,并寻找当前分类id下的所有子分类

        if($p_id == $value[$p_field]) {

            $tree [$key] = $value;

            $tree [$key] ['children'] = tree_list($list,$value ['id'],$p_field);

        }

    }

    return $tree;

//假如这是数据库查出来的

$test_list=[

['id'=>1,'p_id'=>0,'name'=>'分类1'],

['id'=>2,'p_id'=>0,'name'=>'分类1'],//顶级分类

['id'=>3,'p_id'=>0,'name'=>'分类2'],//顶级分类

['id'=>4,'p_id'=>0,'name'=>'分类3'],//顶级分类

['id'=>5,'p_id'=>1,'name'=>'分类8(子)'],//子级分类

['id'=>6,'p_id'=>5,'name'=>'分类9(孙)'],//孙级分类

['id'=>7,'p_id'=>6,'name'=>'分类10(曾孙)'],//曾孙级分类

];


$tree_list=tree_list($test_list,$p_id = 0,$p_field='p_id');

print_r($tree_list);


输出:

Array

(

    [0] => Array

        (

            [id] => 1

            [p_id] => 0

            [name] => 分类1

            [children] => Array

                (

                    [4] => Array

                        (

                            [id] => 5

                            [p_id] => 1

                            [name] => 分类8(子)

                            [children] => Array

                                (

                                    [5] => Array

                                        (

                                            [id] => 6

                                            [p_id] => 5

                                            [name] => 分类9(孙)

                                            [children] => Array

                                                (

                                                    [6] => Array

                                                        (

                                                            [id] => 7

                                                            [p_id] => 6

                                                            [name] => 分类10(曾孙)

                                                            [children] => Array

                                                                (

                                                                )


                                                        )


                                                )


                                        )


                                )


                        )


                )


        )


    [1] => Array

        (

            [id] => 2

            [p_id] => 0

            [name] => 分类1

            [children] => Array

                (

                )


        )


    [2] => Array

        (

            [id] => 3

            [p_id] => 0

            [name] => 分类2

            [children] => Array

                (

                )


        )


    [3] => Array

        (

            [id] => 4

            [p_id] => 0

            [name] => 分类3

            [children] => Array

                (

                )


        )


)



完美~