【PHP】php实现三级菜单

php实现无限级菜单的原理就是递归    转载来源 点击打开链接

1、数据库设计:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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、到数据库取数据,放到数组:

1
2
3
4
5
6
7
require_once  './classes/MyDB.php' ;
$con  = MyDB::singleton();
$sql  = <<<SQL
  select * from bg_cate cate
SQL;
$data  $con ->getAll( $sql );
//print_r($data);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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、把上一步的数据转为树型状的数组代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的数据格式为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
   )



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值