php 无限级分类 获取顶级分类ID


Posted in PHP onMarch 13, 2016

有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID。

现在有个分类ID,程序要找到它上级的上级的上级……分类的ID,简单说就是找出顶级分类的ID。
比如“新鲜水果”的ID是13,对应父类ID是5,而5的父ID是1,1没有父类,也就是顶级分类了。

以前年轻气盛不懂事,总想着用递归来查找,然后再将结果缓存来解决性能问题。
后来又试过将整个表缓存起来,再递归查找。
再后来……似乎比较少有机会遇到无限级分类……

最近有个同事问我怎么“优雅”的解决这个问题。
于是我灵机一动,就有了如下解决方案:

<?php
$sql = "select id, pid from tablename ";
// 查询后 将结果处理成 如下数组格式
$arr = [
  // id => pid
  1 => 0,
  // 省略...
  5 => 1,
  // 省略...
  13 => 5
];
// 建议将这数组缓存起来

$id = 13;
while($arr[$id]) {
  $id = $arr[$id];
}
echo $id; // 1

不得不说:真是太优雅了!连我都佩服我自己了,同事更是五体投地,痛哭流涕。
因为他写了几十行循环再判断再递归的代码,被我用两行代码替换了……

PHP 相关文章推荐
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
PHP递归实现层级树状展开
Apr 01 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
PHP入门教程之上传文件实例详解
Sep 11 PHP
PHP文件操作实例总结
Sep 27 PHP
详解PHP发送邮件知识点
May 06 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
Yii 框架入口脚本示例分析
May 19 PHP
PHP实现文件上传与下载实例与总结
Mar 13 #PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
Mar 11 #PHP
PHP批量去除BOM头内容信息代码
Mar 11 #PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 #PHP
php实现无限级分类查询(递归、非递归)
Mar 10 #PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 #PHP
Zend Framework教程之配置文件application.ini解析
Mar 10 #PHP
You might like
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
js url传值中文乱码之解决之道
2009/11/20 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
python实现根据月份和日期得到星座的方法
2015/03/27 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
物流经理自我评价
2013/09/23 职场文书
教师绩效工资方案
2014/02/01 职场文书
加薪通知
2015/04/25 职场文书
离婚案件上诉状
2015/05/23 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
年终工作总结范文
2019/06/20 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers