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 相关文章推荐
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
如何让搜索引擎抓取AJAX内容解决方案
Aug 25 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 PHP
php实现映射操作实例详解
Oct 02 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 CURL获取cookies模拟登录的方法
2013/11/04 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
php简单分页类实现方法
2015/02/26 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
详解json在php中的应用
2018/09/30 PHP
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
vue filters的使用详解
2018/06/11 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python实现抽奖小程序
2020/04/15 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
python保留小数位的三种实现方法
2020/01/07 Python
Python是什么 Python的用处
2020/05/26 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
css3学习心得分享
2013/08/19 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
异常和异常类的概念
2014/09/12 面试题
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
道德之星事迹材料
2014/05/03 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang