所謂的無極限分類就是一個類可以分成多個子類,然後一個子類又可以分出另外多個子類。
在日常的工作中很多地方都需要用到無極限分類,如評論,網站版塊,省市清單等等,下面通過一個簡單的例子來實作無極限分類:
首先建立一個資料庫:
CREATE TABLE IF NOT EXISTS `category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(10),
`name` varchar(50),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
pid 表示父類id;
然後插入一些資料:
INSERT INTO `category`(`id`,`pid`,`name`) VALUES(1,'0','北京'),(2,'1','豐台區'),(3,'1','朝陽區'),(4,'1','通州區'),(5,'1','大興區'),(6,'1','昌平區'),(7,'1','房山區'),(8,'0','湖南省'),(9,'8','常德市'),(10,'8','長沙市'),(11,'9','武陵區'),(12,'10','雨花區'),(13,'9','石門縣'),(14,'9','鼎城區'),(15,'10','望城縣'),(16,'0','河南省'),(17,'16','高新區'),(18,'16','中原區'),(19,'17','蓮花街')(20,'18','中原大道'),(21,'16','鄭大新區');
通過遞歸的方式實作無極限分類:
<?php
$link=mysql_connect('localhost','root','123456');
if(!$link){
die("連接配接失敗:".mysql_error());
}
mysql_select_db('test') or die("不能連接配接資料庫".mysql_error());
$sql="select * from category";
$query=mysql_query($sql);
if($query){
while(list($id,$pid,$name)=mysql_fetch_row($query)){
static $i=0;
$i++;
$arr[$i]['id']=$id;
$arr[$i]['pid']=$pid;
$arr[$i]['name']=$name;
}
}
function GetTree($arr,$pid,$step){
global $tree;
foreach($arr as $key=>$val) {
if($val['pid'] == $pid) {
$flg = str_repeat('└―',$step);
$val['name'] = $flg.$val['name'];
$tree[] = $val;
GetTree($arr , $val['id'] ,$step+1);
}
}
return $tree;
}
$newarr=GetTree($arr,0,0);
foreach($newarr as $value){
echo $value['name'].'<br>';
}
?>
效果如圖: