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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
帖几个PHP的无限分类实现想法~
Jan 02 PHP
mysql+php分页类(已测)
Mar 31 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
php获取字段名示例分享
Mar 03 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
简单谈谈PHP中的trait
Feb 25 PHP
PHP实现的简单AES加密解密算法实例
May 29 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
PHP的FTP学习(三)
2006/10/09 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP里的单例类写法实例
2015/06/25 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
一个实用的php验证码类
2017/07/06 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
实例讲解PHP表单
2020/06/10 PHP
PHP7 标准库修改
2021/03/09 PHP
Javascript实现的分页函数
2007/02/07 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
发布你的Python模块详解
2016/09/15 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
银行实习的自我鉴定
2013/12/10 职场文书
医院领导班子整改方案
2014/10/01 职场文书
语文复习计划
2015/01/19 职场文书
2015年教学工作总结
2015/04/02 职场文书
节水宣传标语口号
2015/12/26 职场文书
我去timi了,一起去timi是什么意思?
2022/04/13 杂记