I select all the category elements starting from parent id= 0 and put the items which their parent id value equals to parent node's id.
public function get_categories($table_name, $parent_id = 0)
{
$this->db->where('`parent`', $parent);
$parent = $this->db->get($table_name);
$categories = $parent->result();
$i = 0;
foreach ($categories as $p_cat) {
$categories[$i]->sub = $this->sub_categories($table_name, $p_cat->id);
$i++;
}
return $categories;
}
public function sub_categories($table_name, $id)
{
$this->db->where('`parent`', $id);
$child = $this->db->get($table_name);
$categories = $child->result();
$i = 0;
foreach ($categories as $p_cat) {
$categories[$i]->sub = $this->sub_categories($table_name, $p_cat->id);
$i++;
}
return $categories;
}
This is the output of my_categories table. $categories content is as follows:
Array (
[0] => stdClass Object (
[id] => 1
[name] => XMLELEMENT10
[parent] => 0
[sub] => Array (
[0] => stdClass Object (
[id] => 13
[name] => XMLELEMENT113
[parent] => 1
[sub] => Array ( )
)
[1] => stdClass Object (
[id] => 14
[name] => XMLELEMENT114
[parent] => 1
[sub] => Array ( )
)
[2] => stdClass Object (
[id] => 15
[name] => XMLELEMENT115
[parent] => 1
[sub] => Array ( ) )
[3] => stdClass Object (
[id] => 16
[name] => XMLELEMENT116
[parent] => 1
[sub] => Array ( )
)
)
)
[1] => stdClass Object (
[id] => 2
[name] => XMLELEMENT20
[parent] => 0
[sub] => Array (
[0] => stdClass Object (
[id] => 5
[name] => XMLELEMENT52
[parent] => 2
[sub] => Array ( )
)
)
)
[2] => stdClass Object (
[id] => 3
[name] => XMLELEMENT30
[parent] => 0
[sub] => Array (
[0] => stdClass Object (
[id] => 6
[name] => XMLELEMENT63
[parent] => 3
[sub] => Array ( )
)
[1] => stdClass Object (
[id] => 7
[name] => XMLELEMENT73
[parent] => 3
[sub] => Array ( )
)
[2] => stdClass Object (
[id] => 8
[name] => XMLELEMENT83
[parent] => 3
[sub] => Array ( )
)
[3] => stdClass Object (
[id] => 9
[name] => XMLELEMENT93
[parent] => 3
[sub] => Array ( )
)
)
)
[3] => stdClass Object (
[id] => 4
[name] => XMLELEMENT40
[parent] => 0
[sub] => Array (
[0] => stdClass Object (
[id] => 10
[name] => XMLELEMENT104
[parent] => 4
[sub] => Array ( )
)
[1] => stdClass Object (
[id] => 11
[name] => XMLELEMENT2017114
[parent] => 4
[sub] => Array ( )
)
[2] => stdClass Object (
[id] => 12
[name] => XMLELEMENT122
[parent] => 4
[sub] => Array ( )
)
)
)
[4] => stdClass Object (
[id] => 17
[name] => XMLELEMENT170
[parent] => 0
[sub] => Array (
[0] => stdClass Object (
[id] => 18
[name] => XMLELEMENT1817
[parent] => 17
[sub] => Array ( )
)
[1] => stdClass Object (
[id] => 19
[name] => XMLELEMENT1917
[parent] => 17
[sub] => Array ( )
)
[2] => stdClass Object (
[id] => 20
[name] => XMLELEMENT2017
[parent] => 17
[sub] => Array ( )
)
)
)
)
Question is simple but I cannot figure out. I just need to list all items like
<ul>
<li>root
<!-- if has children -->
<ul>
<li>child
<!-- if has children -->
<ul>
<li>child of child
.
.
.
</ul>
</li>
</ul>
I was unable to write that simple recursive function.