PHP实现递归无限级分类

 更新时间:2015年10月22日 11:54:53   投稿:lijiao  
这篇文章主要介绍了PHP实现递归无限级分类的方法,具有一定的参考价值,需要的朋友可以参考下

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么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
根据不同的需求,我们提供两种不同格式的自定义函数,一种是返回字符串,一种是返回数组,两种函数都使用了递归方法。先看返回字符串格式的函数:

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); //输出无限级分类 

效果如:

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

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); //输出数组 

输出效果如:

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

echo json_encode($list); 

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

相关文章

  • Yii2中datetime类的使用

    Yii2中datetime类的使用

    这篇文章主要介绍了Yii2中datetime类的使用的相关资料,需要的朋友可以参考下
    2016-12-12
  • php中引用符号(&)的使用详解

    php中引用符号(&)的使用详解

    php的引用就是在变量或者函数、对象等前面加上&符号,在PHP 中引用的意思是:不同的名字访问同一个变量内容,下面介绍如何使用PHP的引用
    2013-11-11
  • php实现专业获取网站SEO信息类实例

    php实现专业获取网站SEO信息类实例

    这篇文章主要介绍了php实现专业获取网站SEO信息类,实例分析了seoreport类针对网站SEO信息检查与获取的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • PHP实现的支付宝支付功能示例

    PHP实现的支付宝支付功能示例

    这篇文章主要介绍了PHP实现的支付宝支付功能,结合实例形式分析了php使用支付宝接口实现支付功能相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • PHP截断标题且兼容utf8和gb2312编码

    PHP截断标题且兼容utf8和gb2312编码

    PHP截断标题的方法有很多,但同时可以兼容utf8和gb2312却不多了,下面有个不错的方法,可以参考下,或许对大家有所帮助
    2013-09-09
  • Memcache 在PHP中的使用技巧

    Memcache 在PHP中的使用技巧

    Memcache 在PHP中的使用
    2010-02-02
  • PHP操作FTP类 (上传、下载、移动、创建等)

    PHP操作FTP类 (上传、下载、移动、创建等)

    这篇文章主要介绍了PHP操作FTP类,实现FTP上传、FTP下载、FTP移动、FTP创建等,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • 简单谈谈php浮点数精确运算

    简单谈谈php浮点数精确运算

    如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面我们介绍一下一些常用的BC高精确度函数使用。
    2016-03-03
  • php下用GD生成生成缩略图的两个选择和区别

    php下用GD生成生成缩略图的两个选择和区别

    php下用GD生成生成缩略图的两个选择和区别...
    2007-04-04
  • PHP单元测试利器 PHPUNIT初探

    PHP单元测试利器 PHPUNIT初探

    你是否在程序开发的过程中遇到以下的情况:当你花了很长的时间开发一个应用后,你认为应该是大功告成了,可惜在调试的时候,老是不断的发现bug,而且最可怕的是,这些bug是重复出现的,你可能发现这些bug之间会有关联,但却老是找不到问题的所在。
    2011-03-03

最新评论