PHP 通过递归方法创建无限级菜单

2011-08-06 21:46:16

对不起,很久没有更新了,最近闲着没事,研究了一下php生成菜单的方法,经过google 得出的结果不尽人意,所以希望自己把实现方法发上来,以帮助更多有需要的人。

一、现实效果

二、数据库结构

三、sql代码

 

CREATE TABLE IF NOT EXISTS `menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(11) NOT NULL,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

--
-- Dumping data for table `menu`
--

INSERT INTO `menu` (`id`, `fid`, `name`) VALUES
(1, 0, '分类1'),
(2, 0, '分类2'),
(3, 1, '分类1-1'),
(4, 1, '分类1-2'),
(5, 2, '分类2-1'),
(6, 4, '分类1-2-1'),
(7, 6, '分类1-2-1-1'),
(8, 6, '分类1-2-1-2'),
(9, 8, '分类1-2-1-2-1'),
(10, 8, '分类1-2-1-2-2'),
(11, 0, '分类3'),
(12, 0, '分类4');

四、PHP 代码

query($sql);
		$rows=NULL;
		while($row=mysql_fetch_assoc($result)){
			$rows[]=$row;
		}
		mysql_free_result($result);
		return $rows;
	}
	//反回记录个数	
	private function sum($sql){
		$result=$this->query($sql);
		$rows=mysql_num_rows($result);
		mysql_free_result($result);
		return $rows;
	}
	//列出菜单列表函数
	public function menulist($start){
		$sql="select * from menu where fid=$start order by fid desc";
		$rows=$this->fetch_all($sql);
		echo "
    \n"; for($i=0;$i".$rows[$i]['name']."\n"; $tsql="select * from menu where fid=".$rows[$i]['id']; if($this->sum($sql)){ $this->menulist($rows[$i]['id']); } } echo "
\n"; } //创建析构函数,作用:关闭数据库连接 public function __destruct(){ return mysql_close(); } } $db=new menu();//生成实例 $db->menulist(0);//调用方法生成菜单 ?>

Oh~~~Enjoy !!!