PHP利用递归函数实现无限级分类的方法


Posted in PHP onMarch 22, 2019

相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径。各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了。

什么是无限级分类?

无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了。其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类。分类无处不在,分类显得“无限”。我这里就不说无限分类的必要性了。

无限级分类原理简介

无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,id,pid。id用来标识自身,而pid则是用来表明父级id。也就是说,每个分类记录不仅描述了自身,还描述了与其关心最为紧密的另一个id。看似复杂的事情被这样一个小技巧解决了。

php无限级分类是经常要用到的,本人以前一直用的是已经写好的,所以没仔细去研究过,下面是一个使用递归实现的简单的php无限级分类的函数;也许这不是最优的方法,但对于一般的应用也足够了。

数据表结构

CREATE TABLE IF NOT EXISTS `category` (
 `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '唯一自增id',
 `pid` int(5) NOT NULL DEFAULT '0' COMMENT '父id',
 `sort` int(2) NOT NULL DEFAULT '0' COMMENT '排序数字',
 `name` varchar(30) DEFAULT NULL COMMENT '名称',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='无限极分类表' AUTO_INCREMENT=1 ;

数据

INSERT INTO `category` (`id`, `pid`, `sort`, `name`) VALUES
(1, 0, 1, 'php'),
(2, 0, 2, '数据库'),
(3, 0, 3, 'javascript'),
(4, 1, 1, '框架模板'),
(5, 1, 2, '函数总结'),
(6, 2, 1, 'mysql'),
(7, 4, 1, '框架'),
(8, 4, 2, '模板'),
(9, 8, 1, 'smarty'),
(10, 7, 2, 'thinkphp'),
(11, 10, 1, 'thinkphp技巧'),
(12, 10, 2, 'thinkphp模板'),
(13, 12, 3, '模板知识总结'),
(14, 12, 2, '模板视频教程'),
(15, 11, 1, 'model技巧');

函数实现代码

function tree(&$list,$pid=0,$level=0,$html='--'){
  static $tree=array();
  foreach($list as $v){
    if($v['pid']==$pid){
      $v['level']=$level;
      $v['html']=str_repeat($html,$level);
      $tree[]=$v;
      tree($list,$v['id'],$level+1,$html);
    } 
  }
  return $tree;
}

以上tree函数的第一个参数$list就是获取的如上表的一个二维数组的结果集。需要注意的是从数据库获取结果集的sql语句必须加上order by sort asc,否则sort字段将不能发挥排序的作用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
php学习笔记之 函数声明
Jun 09 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
Jun 26 PHP
php检测url是否存在的方法
Apr 14 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
用PHP的反射实现委托模式的讲解
Mar 22 #PHP
PHP读取目录树的实现方法分析
Mar 22 #PHP
针对PHP开发安全问题的相关总结
Mar 22 #PHP
浅谈PHP中的Trait使用方法
Mar 22 #PHP
PHP观察者模式定义与用法实例分析
Mar 22 #PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 #PHP
PHP中$GLOBALS与global的区别详解
Mar 21 #PHP
You might like
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP递归的三种常用方式
2019/02/28 PHP
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
js实现分割上传大文件
2016/03/09 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
JS实现canvas简单小画板功能
2020/06/23 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
利用python爬取有道词典的方法
2020/12/08 Python
英国著名书店:Foyles
2018/12/01 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
送货司机岗位职责
2013/12/11 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
教师工作总结范文2014
2014/11/10 职场文书
客房领班岗位职责
2015/02/11 职场文书
北京青年观后感
2015/06/15 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android
Python加密与解密模块hashlib与hmac
2022/06/05 Python