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 5.0对象模型深度探索之绑定
Sep 05 PHP
php for 循环语句使用方法详细说明
May 09 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
使用PHP编写的SVN类
Jul 18 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
帝国cms目录结构分享
Jul 06 PHP
php中的常用魔术方法汇总
Feb 14 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 PHP
php操作redis数据库常见方法实例总结
Feb 20 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
PHP中的正规表达式(一)
2006/10/09 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
Python装饰器原理与用法分析
2018/04/30 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python配置文件写入过程详解
2019/10/19 Python
Python实现粒子群算法的示例
2021/02/14 Python
汽车销售求职自荐信
2013/10/01 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
世博会口号
2014/06/20 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2015小学师德工作总结
2015/07/21 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书