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远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
paypal即时到账php实现代码
Nov 28 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
php 截取中英文混合字符串的方法
May 31 PHP
Yii2语言国际化自动配置详解
Aug 22 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 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
Content-type 的说明
2006/10/09 PHP
PHP实现图片简单上传
2006/10/09 PHP
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
python 图片验证码代码分享
2012/07/04 Python
Python Tkinter基础控件用法
2014/09/03 Python
Python GUI编程完整示例
2019/04/04 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
查看keras的默认backend实现方式
2020/06/19 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
质量提升方案
2014/06/16 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
社区端午节活动总结
2015/02/11 职场文书