热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP实现递归无限级分类

这篇文章主要介绍了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 .= '
    '; while ($row = mysql_fetch_array($result)) { //循环记录集 $str .= "
  • " . $row['id'] . "--" . $row['title'] . "
  • "; //构建字符串 get_str($row['id']); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级 } $str .= '
'; } 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实现递归无限级分类,希望这篇文章对大家的学习有所帮助。


推荐阅读
  • 本文是我通过网上收集整理。若有漏洞和不全面的地方还请多多指教!google hacking其实并算不上什么新东西,当时并没有重视这种技术,认为webshell什么的,并 ... [详细]
  • 数据库的拓展名有多少种,如何识别四种模糊数据库指能够处理模糊数据的数据库。一般的数据库都是以二直逻辑和精确的数据工具为基础的,不能表示许多模糊不清的事情。随着模糊数学理论体系的建立 ... [详细]
  • python基于PHP+MySQL的网上花卉鲜花销售购物网站
    PHP网上花卉鲜花销售购物网站是一个典型的电子商务网站,它的主要销售对象是人们生活中来不开的鲜花信息,鲜花以来是一个美好的代名词,无论是在节假日还是在一起特殊的节日中人们总会用鲜花 ... [详细]
  • mysql 备份需求【MySQL】
    数据库|mysql教程数据库-mysql教程1、采用定时器来来控制php脚本备份。不涉及时间间隔。完整版网页代码源码库,ubuntu怎么放桌面,爬虫数据包,phpnull,市场se ... [详细]
  • MySQL 聚簇索引二级索引辅助索引
    MySQL聚簇索引&&二级索引&&辅助索引MySQL非聚簇索引&&二级索引&&辅助索引mysql中每个表都有一个聚簇索引(clusteredindex) ... [详细]
  • 子树|祖父_红黑树硬核讲解
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了红黑树硬核讲解相关的知识,希望对你有一定的参考价值。因为申请较晚,本公众号没留言,想交流的欢 ... [详细]
  • 1.增加altertabletrans_push_taskadduniquekey(orderNo);2.删除增加过后查看索引,新建查询。showINDEXfromtrans_pu ... [详细]
  • HTML5中Viewport的参数介绍以及使用方法
    web前端|H5教程Viewport,参数,使用web前端-H5教程互联网发展越来越快,各种技术层出不穷,其中各种设备的显示尺寸分辨率大小不一,这也是目前我们前端人员比较纠结的问题 ... [详细]
  • .NET Web应用程序安装包的制作经历:Sql数据库安装的3种方式
    一次难得的安装包制作经历,因为之前从没有制作过安装包,那就免不了遇到问题,在摸索和学习中获得了不少宝贵经验,在这里我将用图文并茂的形式详细描述一下流程及主要难点问题的解决方法,希望 ... [详细]
  • 这篇文章给大家分享的是有关jquery读取json参数的示例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。jquery读取jso ... [详细]
  • 计算机毕业设计Java企业人事管理系统(源码系统mysql数据库lw文档)计算机毕业设计Java企业人事管理系统(源码系统mysql数据库lw文档)本源 ... [详细]
  • 1.数据库简介1.数据库的能干什么持久的存储数据备份和恢复数据快速的存取数据权限控制2.数据库的类型1.关系数据库​特点:以表和表的关联构成的数据结构 ... [详细]
  • httprunner3.X相比httprunner2.X系统中会新增4个命令:httprunner:核心命令hrun:httprunner的缩写,功能与httprunner完全相同 ... [详细]
  • Springboot 返回数据提示语国际化  实现语言的自由切换(AOP实现)
    前言本篇内容:提示语的国际化返回,自定义多语言。本文使用aop方式,拦截接口返回的数据,进行转换。 ... [详细]
  • 微信小程序实战之菜谱小程序
    最近突发奇想,想要自己搞个小程序玩儿玩儿,但是鉴于自己是搞后端服务器出身,对于偏前端的微信小程序开发实在是一知半解,尤其是对于css类样式相关,更是无从下手,于是乎,只能从晚上找了 ... [详细]
author-avatar
mobiledu2502882247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有