PHP利用递归实现无极限分类

所谓的无极限分类就是一个类可以分成多个子类,然后一个子类又可以分出另外多个子类。

在日常的工作中很多地方都需要用到无极限分类,如评论,网站版块,省市列表等等,下面通过一个简单的例子来实现无极限分类:

首先创建一个数据库:

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>';
}
?>

效果如图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值