我的表格结构如下:
id | name | reporting_to
1 | AAA | 0
2 | BBB | 1
3 | CCC | 2
4 | DDD | 2
and so on...
我想打印它,因此它生成
<ul>
<li> AAA
<ul>
<li>BBB
<ul>
<li>CCC</li>
<li>DDD<li>
</ul>
</li>
</ul>
</li>
</ul>
我目前的代码只使用了一个小问题:
function make_tree($parent, $array, $level = 0){
if(!is_array($array) || empty($array)) return FALSE;
$output = '<ul>';
foreach($array as $index => $item)
{
if($item->reporting_to == $parent)
{
$output .= '<li>'.$item->name;
$output .= $this->make_tree($item->id, $array, $level+1);
$output .= '</li></li>';
}
}
$output .= '</ul>';
return $output;
}
上面的代码打印出以下内容:
//注意<ul>
如何在每个最后的孩子身上打印出来。
<ul>
<li>AAA
<ul>
<li>BBB
<ul>
<li>CCC</li>
<ul></ul> // How do i get rid of this ?
<li>DDD</li>
<ul></ul> // This one too...
</ul>
</li>
</ul>
</li>
</ul>
我不知道如何删除每个孩子的<ul>
。任何人都可以帮我构建<ul>
吗?感谢。
编辑:
我认为更好的问题是:
使用我现有的代码,我应该如何识别给定节点是否 最后一个孩子(该特定节点没有更多孩子)。
答案 0 :(得分:1)
您可以在以后执行此操作,也可以从循环中移除它接缝到重复:
function make_tree($parent, $array, $level = 0){
if(!is_array($array) || empty($array)) return FALSE;
$output = '<ul>';
$hasChildren = false;
foreach($array as $index => $item)
{
if($item->reporting_to == $parent)
{
$hasChildren = true;
$output .= '<li>'.$item->name;
$output .= $this->make_tree($item->id, $array, $level+1);
$output .= '</li>';
}
}
if(!$hasChildren){
return '';
}
$output .= '</ul>';
return $output;
}