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 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
ADODB结合SMARTY使用~超级强
Nov 25 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
php二维数组转成字符串示例
Feb 17 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
深入理解PHP中的global
Aug 19 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
基于PHP-FPM进程池探秘
Oct 17 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引用
2015/02/22 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python可跨平台实现获取按键的方法
2015/03/05 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Django 视图层(view)的使用
2018/11/09 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
工商学院毕业生个人自我评价
2013/09/19 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
专职安全员岗位职责
2015/04/11 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
小学记事作文之200字
2019/08/06 职场文书
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
Python字符串常规操作小结
2022/04/03 Python
Moment的feature导致线上bug解决分析
2022/09/23 Javascript