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 相关文章推荐
cmd下运行php脚本
Nov 25 PHP
php cli 方式 在crotab中运行解决
Feb 08 PHP
PHP 5.3新特性命名空间规则解析及高级功能
Mar 11 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
php实现数组重复数字统计实例
Sep 30 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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
19个超实用的PHP代码片段
2014/03/14 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP精确计算功能示例
2016/11/29 PHP
thinkphp分页集成实例
2017/07/24 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
javascript一点特殊用法
2008/05/28 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
python3+PyQt5实现文档打印功能
2018/04/24 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
中国电视购物:快乐购
2017/02/04 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
无财产无子女离婚协议书范文
2014/09/14 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书