从数据库中一次性读取全部的分类信息,然后将由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
建筑/环境