栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有递归功能的回显菜单树

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有递归功能的回显菜单树

怎么样:

function recurse($categories, $parent = null, $level = 0){    $ret = '<ul>';    foreach($categories as $index => $category)    {        if($category['root'] == $parent)        { $ret .= '<li><a href="#"><p >' . $category['name'] . '</p></a>'; $ret .= $this->recurse($categories, $category['id'], $level+1); $ret .= '</li>';        }    }    return $ret . '</ul>';}

此函数要求您首先在数据库中查询可用类别的整个列表,并假设您的根类别的值为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 = '<ul>';    foreach($categories as $index => $category)    {        if($category['root'] == $parent)        { $ret .= '<li><a href="#"><p >' . $category['name'] . '</p></a>'; $sub = $this->recurse($categories, $category['id'], $level+1); if($sub != '<ul></ul>')     $ret .= $sub; $ret .= '</li>';        }    }    return $ret . '</ul>';}

但是,最好的解决方案是选择数据以包括一列,该列包含每个类别有多少个子类别。

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 = '<ul>';    foreach($categories as $index => $category)    {        if($category['root'] == $parent)        { $ret .= '<li><a href="#"><p >' . $category['name'] . '</p></a>'; if($category['ChildCount'] > 0)     $ret .= $this->recurse($categories, $category['id'], $level+1); $ret .= '</li>';        }    }    return $ret . '</ul>';}

希望有帮助吗?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号