这篇文章主要介绍了php创建无限级树型菜单 ,主要使用的是递归函数,感兴趣的小伙伴们可以参考一下
写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助.。
大概步骤如下:
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 = 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 .= "
- '.$html.'
- 往事如风
- 水煮三国
- 技术学习
- html
- css
- php
- php基础知识
- oop
- php安全
- ".$v['cate_Name']; $html .= getTree($data, $v['cate_Id']); $html = $html." "; } } return $html ? '
5、也可以把第3和第4步的代码合在一起,代码如下:
function getTree($data, $pId) { $html = ''; foreach($data as $k => $v) { if($v['cate_ParentId'] == $pId) { //父亲找到儿子 $html .= "
- '.$html.'
6、最后再加点css样式,效果如下:
整个过程思路很清晰,非常适合第一次创建无限级树型的朋友学习,希望大家都有所收获。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

WebStorm Mac版
好用的JavaScript開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器