Based on: Getting a modified pre-order tree traversal model (nested set) in <ul>
I have the following table:
id name lft rgt level 1 company 1 22 0 75 Developer 26 31 1 76 Tester 24 27 1 77 Analyst 22 23 1 78 under developer 27 30 2 79 under tster 25 26 2
And the following query / code for fetching nested records:
function getstructureInformation() { $treeArr = array(); $tree = array(); $sql = "SELECT node.name, node.id, node.unit_id, node.description,node.lft,node.rgt,node.level, (COUNT(parent.name) - 1) AS depth FROM tablename AS node CROSS JOIN tablename AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft"; $query = $this->db->query($sql); $data = $query->result(); foreach ($data as $datap) { $treeArr['id'] = $datap->id; $treeArr['unit_id'] = $datap->unit_id; $treeArr['lft'] = $datap->lft; $treeArr['rgt'] = $datap->rgt; $treeArr['level'] = $datap->level; $treeArr['name'] = $datap->name; $treeArr['depth'] = $datap->depth; $treeArr['description'] = $datap->description; $tree[] = $treeArr; } return $tree; }
Here's the PHP code to display it on the watch page:
$result = ''; $currDepth = -1; // -1 to get the outer <ul> while (!empty($tree)) { $currNode = array_shift($tree); if ($currNode['depth'] > $currDepth) { echo '<ul>'; } if ($currNode['depth'] < $currDepth) { $result .= str_repeat('</ul>', $currDepth - $currNode['depth']); } echo '<li>' . $currNode['name'] . '</li>'; $currDepth = $currNode['depth']; if (empty($tree)) { echo str_repeat('</ul>', $currDepth + 1); } }
But its display does not display correctly:
It displays the output as:
001 : Company Name 3 : Analyst 2 : Tester 33 : under tster 1 : Developer 44 : under developer
The desired result is as follows:
001 : Company Name 3 : Analyst 2 : Tester 33 : under tster 1 : Developer 44 : under developer
Is there any solution?
source share