Php 从MySQL生成树结构
我的表格结构如下:Php 从MySQL生成树结构,php,tree,html-lists,codeigniter-2,Php,Tree,Html Lists,Codeigniter 2,我的表格结构如下: 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>
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>
- AAA
- BBB
- CCC
- DDD
-
我当前的代码只涉及一个小问题:
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;
}
函数生成树($parent,$array,$level=0){
如果(!is_array($array)| empty($array))返回FALSE;
$output='';
foreach($index=>$item的数组)
{
如果($item->reporting_to==$parent)
{
$output.='- 。$item->name;
$output.=$this->make_tree($item->id,$array,$level+1);
$output.='
';
}
}
$output.='
';
返回$output;
}
上面的代码打印以下内容:
//请注意,
是如何在每个最后的子项上打印的
<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>
- AAA
- BBB
- CCC
//我该如何摆脱它?
- DDD
//这个也是。。。
我不知道如何删除每个孩子身上的
。谁能帮我组织一下
?谢谢
编辑:
我认为更好的问题是:
使用我现有的代码,我应该如何识别给定节点是否为
最后一个子节点(该特定节点没有更多子节点)
您可以稍后再执行此操作,也可以将从循环接缝中删除为重复:
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;
}
函数生成树($parent,$array,$level=0){
如果(!is_array($array)| empty($array))返回FALSE;
$output='';
$hasChildren=false;
foreach($index=>$item的数组)
{
如果($item->reporting_to==$parent)
{
$hasChildren=true;
$output.='- 。$item->name;
$output.=$this->make_tree($item->id,$array,$level+1);
$output.='
';
}
}
如果(!$hasChildren){
返回“”;
}
$output.='
';
返回$output;
}