怎么样:
function recurse($categories, $parent = null, $level = 0)
{
$ret = '
- ';
foreach($categories as $index => $category)
{
if($category['root'] == $parent)
{
$ret .= '
';$ret .= $this->recurse($categories, $category['id'], $level+1);
$ret .= '
';}
}
return $ret . '
';}
此函数要求您首先在数据库中查询可用类别的完整列表,并假定您的根类别的值为null,但可以将该函数更改为接受-1或0,具体取决于当前架构的工作方式.
$categories = { get from database into an multi-dimensional array };
$Tree = $this->recurse($categories);
echo $Tree;
您可以考虑执行以下操作以防止在父项不存在子项时出现任何空UL:
function recurse($categories, $parent = null, $level = 0)
{
$ret = '
- ';
foreach($categories as $index => $category)
{
if($category['root'] == $parent)
{
$ret .= '
';$sub = $this->recurse($categories, $category['id'], $level+1);
if($sub != '
$ret .= $sub;
$ret .= '
';}
}
return $ret . '
';}
但是,最好的解决方案是选择您的数据以包含一个列,其中包含每个类别有多少个子类别.
select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category
你的功能将是:
function recurse($categories, $parent = null, $level = 0)
{
$ret = '
- ';
foreach($categories as $index => $category)
{
if($category['root'] == $parent)
{
$ret .= '
';if($category['ChildCount'] > 0)
$ret .= $this->recurse($categories, $category['id'], $level+1);
$ret .= '
';}
}
return $ret . '
';}
希望有帮助吗?