php创建无限级树型菜单

 更新时间:2015年11月8日 20:27  点击:2659

写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助.。
大概步骤如下
step1:到数据库取数据,放到一个数组,
step2:把数据转化为一个树型状的数组,
step3:把这个树型状的数组转为html代码。
也可以将第二步和第三步合为一步。
详细如下:
1、数据库设计:

CREATE TABLE `bg_cate` (`cate_Id` int(30) unsigned NOT NULL AUTO_INCREMENT,`cate_ParentId` int(30) unsigned DEFAULT '0',`cate_Name` varchar(100) NOT NULL,`cate_Intro` varchar(500) DEFAULT NULL,`cate_Order` int(30) unsigned DEFAULT '0',`cate_Icon` varchar(100) DEFAULT NULL,PRIMARY KEY (`cate_Id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;---- 导出表中的数据 `bg_cate`--INSERT INTO `bg_cate` (`cate_Id`, `cate_ParentId`, `cate_Name`, `cate_Intro`, `cate_Order`, `cate_Icon`) VALUES(4, 0, '往事如风', '记录往事', 0, 'icons/6.gif'),(5, 0, '水煮三国', '品位三国智慧', 0, 'icons/3.gif'),(2, 0, '技术学习', '平时学习的一些笔记,欢迎批评指正。', 0, 'icons/18.gif'),(3, 0, '生活点滴', '记录生活点滴', 0, 'icons/2.gif'),(6, 0, '栀子花开', '青春无限', 0, 'icons/8.gif'),(7, 0, '假日休闲', '悠闲、自在', 0, 'icons/24.gif'),(8, 2, 'html', 'html学习', 0, 'icons/1.gif'),(9, 2, 'css', 'css学习', 0, 'icons/1.gif'),(10, 2, 'php', 'php学习', 0, 'icons/18.gif'),(11, 10, 'php基础知识', 'php基础知识', 0, 'icons/1.gif'),(12, 10, 'oop', 'oop', 0, 'icons/1.gif'),(13, 10, 'php安全', '讲述php安全', 0, 'icons/1.gif'),(14, 10, 'seagull framework', 'seagull framework', 0, 'icons/1.gif'),(15, 2, 'javascript', 'javascript学习', 0, 'icons/1.gif'),(16, 2, '设计模式', NULL, 0, 'icons/1.gif'),(17, 2, '软件工程', '软件工程学习', 0, 'icons/1.gif'),(18, 3, '厦门生活', '厦门生活', 0, 'icons/8.gif'),(19, 3, '大学生活', '大学生活', 0, 'icons/8.gif'),(20, 3, '童年生活', '童年生活', 0, 'icons/15.gif'),(21, 19, '学习', '学习', 0, 'icons/1.gif'),(22, 19, '运动', '运动', 0, 'icons/16.gif'),(23, 19, '旅游', '旅游', 0, 'icons/24.gif'),(24, 22, '排球', '排球', 0, 'icons/9.gif'),(25, 22, '篮球', '篮球', 0, 'icons/9.gif'),(26, 22, '羽毛球', '羽毛球', 0, 'icons/9.gif'),(27, 22, '乒乓球', '乒乓球', 0, 'icons/9.gif');

2、到数据库取数据,放到数组:

require_once './classes/MyDB.php';$con = MyDB::singleton();$sql = <<<SQL select * from bg_cate cateSQL;$data = $con->getAll($sql);//print_r($data);

数据库操作我用的是pear类库,最后的$data的数据格式如下:

Array( [0] => Array ( [cate_Id] => 4 [cate_ParentId] => 0 [cate_Name] => 往事如风 [cate_Intro] => 记录往事 [cate_Order] => 0 [cate_Icon] => icons/6.gif ) [1] => Array ( [cate_Id] => 5 [cate_ParentId] => 0 [cate_Name] => 水煮三国 [cate_Intro] => 品位三国智慧 [cate_Order] => 0 [cate_Icon] => icons/3.gif )

3、把上一步的数据转为树型状的数组代码如下:

function getTree($data, $pId){$tree = '';foreach($data as $k => $v){ if($v['cate_ParentId'] == $pId) { //父亲找到儿子 $v['cate_ParentId'] = getTree($data, $v['cate_Id']); $tree[] = $v; //unset($data[$k]); }}return $tree;}$tree = getTree($data, 0);

最后输出$tree的数据格式为:

Array( [0] => Array ( [cate_Id] => 4 [cate_ParentId] => [cate_Name] => 往事如风 [cate_Intro] => 记录往事 [cate_Order] => 0 [cate_Icon] => icons/6.gif ) [1] => Array ( [cate_Id] => 5 [cate_ParentId] => [cate_Name] => 水煮三国 [cate_Intro] => 品位三国智慧 [cate_Order] => 0 [cate_Icon] => icons/3.gif ) [2] => Array ( [cate_Id] => 2 [cate_ParentId] => Array (  [0] => Array  (  [cate_Id] => 8  [cate_ParentId] =>  [cate_Name] => html  [cate_Intro] => html学习  [cate_Order] => 0  [cate_Icon] => icons/1.gif  )

4、把树型状数组转为html代码如下:

function procHtml($tree){$html = '';foreach($tree as $t){ if($t['cate_ParentId'] == '') { $html .= "<li>{$t['cate_Name']}</li>"; } else { $html .= "<li>".$t['cate_Name']; $html .= procHtml($t['cate_ParentId']); $html = $html."</li>"; }}return $html ? '<ul>'.$html.'</ul>' : $html ;}echo procHtml($tree);输出的html的代码格式为:<ul><li>往事如风</li><li>水煮三国</li><li>技术学习 <ul> <li>html</li> <li>css</li> <li>php <ul> <li>php基础知识</li> <li>oop</li> <li>php安全</li>

5、也可以把第3和第4步的代码合在一起,代码如下:

function getTree($data, $pId){$html = '';foreach($data as $k => $v){ if($v['cate_ParentId'] == $pId) { //父亲找到儿子 $html .= "<li>".$v['cate_Name']; $html .= getTree($data, $v['cate_Id']); $html = $html."</li>"; }}return $html ? '<ul>'.$html.'</ul>' : $html ;}echo getTree($data, 0);

6、最后再加点css样式,效果如下:

整个过程思路很清晰,非常适合第一次创建无限级树型的朋友学习,希望大家都有所收获。

[!--infotagslink--]

相关文章

  • jQuery实现非常实用漂亮的select下拉菜单选择效果

    本文实例讲述了jQuery实现非常实用漂亮的select下拉菜单选择效果。分享给大家供大家参考,具体如下:先来看如下运行效果截图:在线演示地址如下:http://demo.jb51.net/js/2015/js-select-chose-style-menu-codes/具体代码如...2015-11-08
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • vue Treeselect下拉树只能选择第N级元素实现代码

    这篇文章主要介绍了vue Treeselect下拉树只能选择第N级元素实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
  • Python绘制的爱心树与表白代码(完整代码)

    这篇文章主要介绍了Python绘制的爱心树与表白代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06
  • jQuery实现有动画淡出效果的二级折叠菜单代码

    本文实例讲述了jQuery实现有动画淡出效果的二级折叠菜单代码。分享给大家供大家参考,具体如下:这里介绍jQuery实现有动画淡出效果的二级折叠菜单代码,相当不错,因考虑功能的实现,所以没有怎么美化,不过这样也好,可以给大家更...2015-10-21
  • JavaScript动态创建div属性和样式示例代码

    1.创建div元素: Javascript代码 复制代码 代码如下: <scripttypescripttype="text/javascript"> functioncreateElement(){ varcreateDiv=document.createElement("div"); createDiv.innerHTML="Testcreateadiveleme...2013-10-13
  • jQuery实现可关闭固定于底(顶)部的工具条菜单效果

    本文实例讲述了jQuery实现可关闭固定于底(顶)部的工具条菜单效果。分享给大家供大家参考,具体如下:这是一款可关闭始终在页面底部的工具条菜单,浮动在页面顶部的大家见的比较多了,本款从形式上来说与其它的没什么差别,只是浮...2015-11-08
  • jQuery实现下拉菜单滑动效果

    这篇文章主要为大家详细介绍了jQuery实现下拉菜单滑动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-09
  • jQuery+PHP+MySQL二级联动下拉菜单实例讲解

    二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动。本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果。 实现效果:当选择大类时,小类下拉框里的选项内容也随着改...2015-10-30
  • Vue.js 递归组件实现树形菜单(实例分享)

    本文主要对介绍利用Vue.js 的递归组件,实现了一个最基本的树形菜单。具有很好的参考价值,下面就跟着小编一起来看下吧...2017-01-09
  • jQuery实现精美的多级下拉菜单特效

    这是一款精美的多级下拉菜单美化,可以完美替代“select”来实现下拉菜单的效果。而且支持多级菜单,有加载等待效果,有层级分类展示。复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "ht...2015-03-15
  • js如何构造elementUI树状菜单的数据结构详解

    由于业务需要,要求实现树形菜单,且菜单数据由后台返回,下面这篇文章主要给大家介绍了关于js如何构造elementUI树状菜单的数据结构的相关资料,需要的朋友可以参考下...2021-05-13
  • jquery插件实现悬浮的菜单

    这篇文章主要为大家详细介绍了jquery插件实现悬浮的菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-23
  • JS创建Tag标签的方法详解

    这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
  • JS实现不使用图片仿Windows右键菜单效果代码

    本文实例讲述了JS实现不使用图片仿Windows右键菜单效果代码。分享给大家供大家参考,具体如下:这里演示JS不使用图片仿Windows右键菜单效果,这款代码灵活使用了文鼎字,配合CSS和JS做出了这个和系统右键菜单很相似的东东。...2015-10-23
  • 什么是cookie?js手动创建和存储cookie

    什么是cookie? cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。 有关cookie的例子: 名字 cookie 当访...2014-05-31
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PS如何创建变形文字 ps给文字变形的方法

    PS怎么创建变形文字?ps中想要给输入的文字变形,该怎么调整文字的显示形态呢?下面我们就来看看ps给文字变形的方法,需要的朋友可以参考下 我们在图层上输入文字后,可以...2017-07-06
  • jQuery实现的导航下拉菜单效果

    这篇文章主要介绍了jQuery实现的导航下拉菜单效果,涉及jQuery响应鼠标事件动态操作页面元素的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2016-07-06