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

xiaoxiao2021-02-28  78

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

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

首先创建一个数据库:

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

效果如图:

转载请注明原文地址: https://www.6miu.com/read-52455.html

最新回复(0)