从数据库中一次性读取全部的分类信息,然后将由php生成树,支持无限分类,采用的方式是父值,容易理解,效率比起其它类似左右值的无限分类,当类别过多时可能效率要差些!
CREATE TABLE IF NOT EXISTS `membercat` ( `mcid` int(10) NOT NULL auto_increment COMMENT '会员分类ID号', `mcname` varchar(255) NOT NULL COMMENT '分类名称', `fid` int(10) default NULL COMMENT '父ID号', `rank` int(10) default NULL COMMENT '级别', `mcorder` int(10) NOT NULL COMMENT '排序', PRIMARY KEY (`mcid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='个人会员分类表' AUTO_INCREMENT=13 ; -- -- 导出表中的数据 `membercat` -- INSERT INTO `membercat` (`mcid`, `mcname`, `fid`, `rank`, `mcorder`) VALUES (1, '平面设计', 0, 1, 1), (2, 'UI设计', 0, 1, 2), (3, 'CG/动画', 0, 1, 3), (4, '工业设计', 0, 1, 4), (5, '建筑/环境', 0, 1, 5), (7, '2222', 2, 2, 6), (8, '1111', 2, 2, 9), (9, '3333', 7, 3, 8), (10, '4444', 4, 2, 10), (11, '5555', 3, 2, 11), (12, 'asdasd', 8, 3, 12);
php类
<?php class getMemberCat { public $c=array(); public $arr=''; public function __construct() { $membercat_=db('membercat'); if($cat=$membercat_->order("mcorder")->findAll()){ foreach($cat as $v){ $this->c[$v['rank']][]=$v; } for($s=0;$s<count($this->c[1]);$s++){ $this->arr[]=array('name'=>$this->c[1][$s]['mcname'],'mcid'=>$this->c[1][$s]['mcid']); $this->get($this->c[1][$s]['mcid'],2); } } return $this->arr; } public function get($fid,$j) { $px=""; for($x=1;$x<$j;$x++){ $px.=" "; } $px=empty($px)?"":$px."└--"; for($i=0;$i<count($this->c[$j]);$i++){ if($this->c[$j][$i]['fid']==$fid){ $this->arr[]=array('name'=>$px.$this->c[$j][$i]['mcname'],'mcid'=>$this->c[$j][$i]['mcid']); $this->get($this->c[$j][$i]['mcid'],$j+1); } } } } $mCat=new getMemberCat(); foreach($mCat->arr as $v){ echo $v['name'].'<br />'; } ?>
最终显示结果:
平面设计
UI设计
└–2222
└–3333
└–1111
└–asdasd
CG/动画
└–5555
工业设计
└–4444
建筑/环境