PHP无限多级菜单,感觉其他的都满足不了我的要求

先上数据库

--
-- 表的结构 `pre_aa_menu`
--

CREATE TABLE IF NOT EXISTS `pre_aa_menu` (
  `menu_id` int(11) NOT NULL AUTO_INCREMENT,
  `menu` varchar(20) NOT NULL,
  `menu_grade` int(11) NOT NULL,
  `menu_superior` int(11) NOT NULL,
  `display` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`menu_id`),
  UNIQUE KEY `menu_id` (`menu_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=gbk ;

--
-- 转存表中的数据 `pre_aa_menu`
--

INSERT INTO `pre_aa_menu` (`menu_id`, `menu`, `menu_grade`, `menu_superior`, `display`) VALUES
(1, '计算机', 1, 0, 1),
(2, '编程', 2, 1, 0),
(3, '网络', 2, 1, 0),
(4, 'PHP与MySql', 3, 2, 0),
(5, 'C语言', 3, 2, 0),
(6, '网页制作', 3, 3, 0),
(7, 'TCP、IP协议', 3, 3, 0),
(8, '数学', 1, 0, 0),
(9, '高等数学', 2, 8, 0),
(10, '线性代数', 3, 9, 0),
(11, '离散数学', 3, 9, 0),
(12, '初等数学', 2, 8, 0),
(13, '文学', 1, 0, 0),
(14, '中国文学', 2, 13, 0),
(15, 'php', 4, 4, 0),
(16, 'mysql', 4, 4, 0);


下面是代码,由于我是在Discuz!下写的,所以语法直接用的DZ的,数据库操作大家可以自行修改
		$datas = DB::fetch_all("SELECT * FROM %t ORDER BY display ASC", array($this->_table));
		foreach ($datas as $data){
			$menu[$data['menu_grade']][$data['menu_id']] = $data;
		}
		$max = count($menu);
		for($i=0;$i<$max;$i++){
			foreach ($menu[$max-$i] as $menus){
				$menu[$menus['menu_grade']-1][$menus['menu_superior']]['next'][$menus['menu_id']] = $menus;
			}
		}
		$last = $menu[1];
		print_r ($last);


猜你喜欢

转载自blog.csdn.net/xjc8289555/article/details/47909791