$array=Array(
    0 => Array("id" => 329, "parent" => -1,"name" => "web", "user_id" => 3 ),
    1 => Array("id" => 330, "parent" => 329, "name" => "php","user_id" => 3),
    2 => Array("id" => 336,"parent" => 329,"name" => "nginx","user_id" => 3),
    3 => Array("id" => 337,"parent" => 330,"name" => "apache","user_id" => 3),
    4 => Array("id" => 338,"parent" => 336,"name" => "httpd", "user_id" => 3),
    5 => Array("id" => 339,"parent" => 336,"name" => "httpd","user_id" => 3),
    6 => Array("id" => 340,"parent" => 329,"name" => "httpd", "user_id" => 3),
    7 => Array("id" => 341,"parent" => 329,"name" => "httpd", "user_id" => 3),
    8 => Array("id" => 342,"parent" => -1,"name" => "httpd", "user_id" => 3),
    9 => Array("id" => 343,"parent" => 329,"name" => "httpd", "user_id" => 3),
    10 => Array("id" => 344,"parent" => 329,"name" => "httpd", "user_id" => 3),
    14 => Array("id" => 348,"parent" => 329,"name" => "httpd", "user_id" => 3),
    15 => Array("id" => 349,"parent" => -1,"name" => "httpd", "user_id" => 3),
    100 => Array("id" => 3444,"parent" => 329,"name" => "httpd", "user_id" => 3)
);
function tree($array=null,$tid=null,$tpid=null,$tname=null,$pid=-1)
{
$str="";
if(count($array)<=1)return ;
$str="<ul>";
foreach($array as $key=>$value)
{
if($value[$tpid]==$pid)
{
$array_temp[]=$array[$key];
unset($array[$key]);
$str.="<li>".$value[$tname].
tree($array,$tid,$tpid,$tname,$value[$tid])."</li>";
}
}
$str.="</ul>";
return  $str;
}
print_r(tree($array,"id","parent","name"));以上得到下面 。<ul>
<li>web
<ul>
<li>php
<ul>
<li>apache<ul></ul></li>
</ul>
</li>
<li>nginx
<ul>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
</ul>
</li>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
</ul>
</li>
<li>httpd<ul></ul></li>
<li>httpd<ul></ul></li>
</ul>如何把多余的<ul></ul>去掉  。或者有更好的树形?

解决方案 »

  1.   

       function tree($array=null,$tid=null,$tpid=null,$tname=null,$pid=-1)
        {
            $str="";
            if(count($array)<=1)return ;        foreach($array as $key=>$value)
            {
                if($value[$tpid]==$pid)
                {
                    $array_temp[]=$array[$key];
                    unset($array[$key]);
                    $str.="<li>".$value[$tname].
                    tree($array,$tid,$tpid,$tname,$value[$tid])."</li>";
                }
            }
            
            return  $str ? "<ul>$str</ul>" : '';
        }