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中使用Oracle数据库(2)
Oct 09 PHP
php Ajax乱码
Apr 09 PHP
PHP学习 运算符与运算符优先级
Jun 15 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php实现根据词频生成tag云的方法
Apr 17 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 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+mysql写的简单留言本实例代码
2008/07/25 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
[JS]点出统计器
2020/10/11 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
python二叉树的实现实例
2013/11/21 Python
记录Django开发心得
2014/07/16 Python
Python解决鸡兔同笼问题的方法
2014/12/20 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
python 判断网络连通的实现方法
2018/04/22 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
给领导的致歉信范文
2014/01/13 职场文书
民族学专业求职信
2014/07/28 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
学校远程教育工作总结
2015/08/11 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle