PHP实现递归无限级分类


Posted in PHP onOctober 22, 2015

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。
递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。
Mysql
首先我们准备一张数据表class,记录商品分类信息。表中有三个字段,id:分类编号,主键自增长;title:分类名称;pid:所属上级分类id。
class表结构:

CREATE TABLE IF NOT EXISTS `class` ( 
 `id` mediumint(6) NOT NULL AUTO_INCREMENT, 
 `title` varchar(30) NOT NULL, 
 `pid` mediumint(6) NOT NULL DEFAULT '0', 
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

插入数据后,如图:

PHP实现递归无限级分类

PHP
根据不同的需求,我们提供两种不同格式的自定义函数,一种是返回字符串,一种是返回数组,两种函数都使用了递归方法。先看返回字符串格式的函数:

function get_str($id = 0) { 
 global $str; 
 $sql = "select id,title from class where pid= $id"; 
 $result = mysql_query($sql);//查询pid的子类的分类 
 if($result && mysql_affected_rows()){//如果有子类 
  $str .= '<ul>'; 
  while ($row = mysql_fetch_array($result)) { //循环记录集 
   $str .= "<li>" . $row['id'] . "--" . $row['title'] . "</li>"; //构建字符串 
   get_str($row['id']); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级 
  } 
  $str .= '</ul>'; 
 } 
 return $str; 
}

以上函数get_str()通过递归,不断查询下级分类,并最终返回字符串,大家可以根据项目需求修改其中的str,最终生成一个无限分级列表:

include_once('connect.php'); //连接数据库,connect.php文件自己写一个啊 
echo get_str(0); //输出无限级分类

效果如:

PHP实现递归无限级分类

接着我们来看返回数组格式的函数,一样要使用递归:

function get_array($id=0){ 
 $sql = "select id,title from class where pid= $id"; 
 $result = mysql_query($sql);//查询子类 
 $arr = array(); 
 if($result && mysql_affected_rows()){//如果有子类 
  while($rows=mysql_fetch_assoc($result)){ //循环记录集 
   $rows['list'] = get_array($rows['id']); //调用函数,传入参数,继续查询下级 
   $arr[] = $rows; //组合数组 
  } 
  return $arr; 
 } 
}

函数get_array()返回了数组,这是我们期待的,所以笔者推荐使用get_array()得到数组,这样一来,我们可以对数组进行任意操作,比如我们可以将数组转换成json格式的数据传给前端页面,前端页面可以通过解析json数据灵活展示分类信息。比如树形结构的分类列表,下拉分类列表等。

include_once('connect.php'); //连接数据库 
$list = get_array(0); //调用函数 
print_r($list); //输出数组

输出效果如:

PHP实现递归无限级分类

如果要输出json格式的数据,则可使用:

echo json_encode($list);

以上方法教会大家如何利用php实现递归无限级分类,希望这篇文章对大家的学习有所帮助。

PHP 相关文章推荐
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
PHP实时显示输出
Oct 02 PHP
php 代码优化之经典示例
Mar 24 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
PHP动态柱状图实现方法
Mar 30 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 PHP
php防止网站被攻击的应急代码
Oct 21 #PHP
PHP统计当前在线用户数实例讲解
Oct 21 #PHP
php精确的统计在线人数的方法
Oct 21 #PHP
为你总结一些php信息函数
Oct 21 #PHP
深入理解PHP变量的值类型和引用类型
Oct 21 #PHP
为你总结一些php系统类函数
Oct 21 #PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 #PHP
You might like
PHP 作用域解析运算符(::)
2010/07/27 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
jquery中this的使用说明
2010/09/06 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python获得图片base64编码示例
2014/01/16 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
中国文明网签名寄语
2014/01/18 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
无罪辩护词范文
2015/05/21 职场文书
谢师宴家长致辞
2015/07/27 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL