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.ini中文版
Oct 09 PHP
人大复印资料处理程序_补充篇
Oct 09 PHP
php的curl实现get和post的代码
Aug 23 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
用 Composer构建自己的 PHP 框架之基础准备
Oct 30 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
php实现微信支付之退款功能
May 30 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 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
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
python双向链表实现实例代码
2013/11/21 Python
Python中的闭包实例详解
2014/08/29 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python3多线程基础知识点
2019/02/19 Python
详解python深浅拷贝区别
2019/06/24 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
python支持多线程的爬虫实例
2019/12/21 Python
django中嵌套的try-except实例
2020/05/21 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
企业项目策划书
2014/01/11 职场文书
上课看小说检讨书
2014/02/22 职场文书
生产文员岗位职责
2014/04/05 职场文书
师范大学生求职信
2014/06/13 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
Django框架中表单的用法
2022/06/10 Python