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