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函数
Jan 11 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
解析php中memcache的应用
Jun 18 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
PHP捕获Fatal error错误的方法
Jun 11 PHP
php中JSON的使用与转换
Jan 14 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
Centos7安装swoole扩展操作示例
Mar 26 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 快速排序算法详解
2014/11/10 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
Python中设置变量访问权限的方法
2015/04/27 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
通过自学python能找到工作吗
2020/06/21 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
售后专员岗位职责
2013/12/08 职场文书
化妆品店促销方案
2014/02/24 职场文书
静心口服夜广告词
2014/03/20 职场文书
党员创先争优活动总结
2014/05/04 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
关于环保的宣传稿
2015/07/23 职场文书
厉行节约工作总结
2015/08/12 职场文书