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; }