从MySQL制作树形结构

时间:2014-10-02 09:23:52

标签: 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>
               <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>吗?感谢。

编辑:

我认为更好的问题是:

  

使用我现有的代码,我应该如何识别给定节点是否   最后一个孩子(该特定节点没有更多孩子)。

1 个答案:

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