显示树状结构中的UL L1标签从没有工作
问题描述:
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
而下面的查询/代码获取嵌套的记录:
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;
}
这里将PHP代码显示到视图页中:
$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);
}
}
但它不能正常显示,如:
它显示输出:
001 : Company Name
3 : Analyst
2 : Tester
33 : under tster
1 : Developer
44 : under developer
所需的输出是这样的:
001 : Company Name
3 : Analyst
2 : Tester
33 : under tster
1 : Developer
44 : under developer
有没有什么解决办法吗?
答
这应该工作:
function printTree ($tree) {
$last_level = -1;
foreach ($tree as $v) {
$diff = $v['level'] - $last_level;
if ($diff == 0) {
echo '<li>' .$v['name']. '</li>';
}
elseif ($diff > 0) {
for ($i = 0; $i < $diff; $i++)
echo '<ul>';
echo '<li>' .$v['name']. '</li>' ;
}
else {
for ($i = 0; $i > $diff; $i--)
echo '</ul>';
echo '<li>' .$v['name']. '</li>' ;
}
$last_level = $v['level'];
}
}
但有了这个功能,你不会有深印。
测试,与
$tree = array (
array (
'name' => 'Line',
'level' => 0
),
array (
'name' => 'Line',
'level' => 1
),
array (
'name' => 'Line',
'level' => 2
),
array (
'name' => 'Line',
'level' => 1
)
);
printTree ($tree);
你能提供一个'var_export(工作)'所得到的'$ tree'阵列的? – 2012-08-03 09:30:36