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 相关文章推荐
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP mcrypt可逆加密算法分析
Jul 19 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
smarty高级特性之过滤器的使用方法
Dec 25 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php去除数组中为0的元素的实例分析
Nov 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
PHP代码优化技巧小结
2015/09/29 PHP
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
简单谈谈python的反射机制
2016/06/28 Python
python将unicode转为str的方法
2017/06/21 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python实现智能语音天气预报
2019/12/02 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
财务工作疏忽检讨书
2014/09/11 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
罚款通知怎么写
2015/04/22 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript