创建深度无限多维数组

I want to build an organizational tree from adatabase using an HTML list and PHP , I am able to go up to the second level but I would like to build it so that it can have unlimited possibilities. Any suggestions?

This is what I have so far:

My data (the numbers are fk_ids of the actual data)

    level  | parent | children
    ----------------------------
       1       1         2
       2       2         3
       2       2         4 (has two children in level 4, becomes a parent)
       2       2         5 (same as level 4 info)
       3       3         8
       3       3         9
       4       4         10
       4       4         11
       4       5         13
       4       5         14

                    level(1)
                        |
                    level(2)
                        |
              ---------------------
     level 3  |         |         |
              3         4         5
                        |         |
                   ----------   -------------
                   |        |   |           |
    level 4       10       11  13           14
                                        10,11,12,14 can also have children

Here is my PHP code:

function getHierarchy(){
  $levels = $this->db
          ->select('level')
          ->group_by('level')
          ->get('tbl_org_hierarchy')
          ->result();
  echo '<pre>';
  print_r($levels);
  echo '</pre>';
  foreach ($levels as $l):
  $hierarchy = $this->db
          ->where('parent',$l->level)
          ->get('tbl_org_hierarchy')
          ->result();
      $structure[] = $hierarchy;
  endforeach;
    echo '<pre>';
  print_r($structure);
  echo '</pre>';
}

OUTPUT

Array
(
[0] => Array
    (
        [0] => stdClass Object
            (
                [id] => 1
                [level] => 1
                [parent] => 1
                [children] => 2
            )

    )

[1] => Array
    (
        [0] => stdClass Object
            (
                [id] => 2
                [level] => 2
                [parent] => 2
                [children] => 3
            )

        [1] => stdClass Object
            (
                [id] => 3
                [level] => 2
                [parent] => 2
                [children] => 4
            )

        [2] => stdClass Object
            (
                [id] => 4
                [level] => 2
                [parent] => 2
                [children] => 5
            )

        [3] => stdClass Object
            (
                [id] => 5
                [level] => 2
                [parent] => 2
                [children] => 6
            )

        [4] => stdClass Object
            (
                [id] => 6
                [level] => 2
                [parent] => 2
                [children] => 7
            )

    )

[2] => Array
    (
        [0] => stdClass Object
            (
                [id] => 7
                [level] => 3
                [parent] => 3
                [children] => 8
            )

        [1] => stdClass Object
            (
                [id] => 8
                [level] => 3
                [parent] => 3
                [children] => 9
            )

    )

[3] => Array
    (
        [0] => stdClass Object
            (
                [id] => 9
                [level] => 4
                [parent] => 4
                [children] => 10
            )

        [1] => stdClass Object
            (
                [id] => 10
                [level] => 4
                [parent] => 4
                [children] => 11
            )

    )

)

How can I make it do a nested loop where even as 4 is a child to 2 at level 3 , it is also a parent to 10 and 11 at level 4

Try following function with your code ,

function fetchCategoryTreeList($parent = 0, $user_tree_array = '') {        
    if (!is_array($user_tree_array))
    $user_tree_array = array();

    $levels = $this->db
                  ->select('level')
                  ->where('parent',$parent)
                  ->group_by('level')
                  ->get('tbl_org_hierarchy')
                  ->result();

    if (count(levels) > 0)
    {
        $user_tree_array[] = "<ul>";
        foreach($levels as $row)        
        {
            $user_tree_array[] = "<li>". $row->level."</li>";
            $user_tree_array = fetchCategoryTreeList($row->level, $user_tree_array);
        }
        $user_tree_array[] = "</ul><br/>";
    }
    return $user_tree_array;
}

$res = fetchCategoryTreeList();