创建深度无限多维数组

时间:2016-08-09 13:36:58

标签: php mysql sql

我想使用HTML列表和PHP从adatabase构建组织树,我可以升级到第二级但我想构建它以便它可以拥有无​​限的可能性。有什么建议吗?

这是我到目前为止所做的:

我的数据(实际数据的数字是fk_ids

    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

这是我的PHP代码:

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>';
}

输出

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
            )

    )

)

我怎样才能让它做一个嵌套循环,即使4是3级的2到2的父级,它也是4级的父级和11级的

1 个答案:

答案 0 :(得分:0)

使用您的代码尝试以下功能

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();