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 相关文章推荐
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
PHP里的中文变量说明
2011/07/23 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
在Python的Django框架中编写错误提示页面
2015/07/22 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
如何用Python合并lmdb文件
2018/07/02 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python3 求约数的实例
2019/12/05 Python
Keras自定义IOU方式
2020/06/10 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
大学生求职信范文
2014/05/24 职场文书
管理提升方案
2014/06/04 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
如何使用pdb进行Python调试
2021/06/30 Python