刚写的的php生成树的类 [读一次数据库,支持无限分类]

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

刚写的的php生成树的类 [读一次数据库,支持无限分类]》有1个想法

评论已关闭。