从拉平数据PHP画“UL礼”树最简单的方法

问题描述:

有在数据库中的个人和位置存储,像这样:从拉平数据PHP画“UL礼”树最简单的方法

$rows = array(
    array(
     'name' => "John Smith", 
     'level'=> 1, 
     'order'=> 1 
    ), 
    array(
     'name' => "Matt Simons", 
     'level'=> 2, 
     'order'=> 1 
    ), 
    array(
     'name' => "Someone Else", 
     'level'=> 2, 
     'order'=> 2 
    ), 
); 

这应该引起:

<ul> 
    <li>John Smith</li> 
    <ul> 
     <li>Matt Simons</li> 
     <li>Someone Else</li> 
    </ul> 
</ul> 

什么是在PHP中执行此操作的最简单方法?

+1

最简单的方法是为它编写一些代码 – 2014-08-30 14:01:47

+0

你的位置没有意义。你只能在1级上有1个值。 – 2014-08-30 14:03:28

+0

@newboyhun我在1级上看不到超过1个值 – 2014-08-30 14:05:10

一个不错的方法是使用DOMDocument动态创建HTML元素。

这是一个适用于您的特定情况的快速示例。但是您必须添加其他检查以使其健壮。

$rows = array(
    array(
     'name' => "John Smith", 
     'level'=> 1, 
     'order'=> 1 
    ), 
    array(
     'name' => "Matt Simons", 
     'level'=> 2, 
     'order'=> 1 
    ), 
    array(
     'name' => "Someone Else", 
     'level'=> 2, 
     'order'=> 2 
    ), 
); 

$dom = new DOMDocument(); 
$ul = $dom->createElement('ul'); 
$dom->appendChild($ul); 
$lastLevel = 1; 
$lastLi = null; 

foreach ($rows as $row) { 
    $li = $dom->createElement('li', $row['name']); 
    if ($lastLevel != $row['level']) { 
     $lastLevel = $row['level']; 
     $ul = $dom->createElement('ul'); 
     $lastLi->appendChild($ul); 
    } 
    $ul->appendChild($li); 
    $lastLi = $li; 
} 

echo $dom->saveHTML();