PHP - How to build tree structure list?

前端 未结 1 971
难免孤独
难免孤独 2020-11-29 03:09

So, my problem is, that I want to build a tree of these 2 tables:

Parent table:
+-------+---------------+
| pr_id |  parent_name  |
+-------+------------         


        
相关标签:
1条回答
  • 2020-11-29 03:51

    You do not need to create 2 tables in the database for this you can maintain it like below from one table only

    +-------+---------------+---------------------------+
    |   id  |   parent_id   |           title           |
    +-------+---------------+---------------------------+
    |   1   |       0       |   Parent Page             |
    |   2   |       1       |   Sub Page                |
    |   3   |       2       |   Sub Sub Page            |
    |   4   |       0       |   Another Parent Page     |
    +-------+---------------+---------------------------+
    

    The array generated will be like

    Array
    (
        [0] => Array
            (
                [id] => 1
                [parent_id] => 0
                [title] => Parent Page
                [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 2
                                        [parent_id] => 1
                                        [title] => Sub Page
                                        [children] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [id] => 3
                                                                [parent_id] => 1
                                                                [title] => Sub Sub Page
                                                            )
                                                    )
                                    )
                            )
            )
        [1] => Array
            (
                [id] => 4
                [parent_id] => 0
                [title] => Another Parent Page
            )
    )
    

    You need to use the below recursive function to achieve it

    function buildTree(array $elements, $parentId = 0) {
        $branch = array();
    
        foreach ($elements as $element) {
            if ($element['parent_id'] == $parentId) {
                $children = buildTree($elements, $element['id']);
                if ($children) {
                    $element['children'] = $children;
                }
                $branch[] = $element;
            }
        }
    
        return $branch;
    }
    
    $tree = buildTree($rows);
    

    The algorithm is pretty simple:

    1. Take the array of all elements and the id of the current parent (initially 0/nothing/null/whatever).
    2. Loop through all elements.
    3. If the parent_id of an element matches the current parent id you got in 1., the element is a child of the parent. Put it in your list of current children (here: $branch).
    4. Call the function recursively with the id of the element you have just identified in 3., i.e. find all children of that element, and add them as children element.
    5. Return your list of found children.
    0 讨论(0)
提交回复
热议问题