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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
php处理restful请求的路由类分享
Feb 27 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
golang 调用 php7详解及实例
Jan 04 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
PHP实现多条件查询实例代码
2010/07/17 PHP
php测试kafka项目示例
2020/02/06 PHP
密码框显示提示文字jquery示例
2013/08/29 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
python实现淘宝购物系统
2019/10/25 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
会计的岗位职责
2014/03/15 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
维修工先进事迹
2014/05/29 职场文书
趣味运动会策划方案
2014/06/02 职场文书
七夕情人节促销方案
2014/06/07 职场文书
同学毕业留言寄语
2015/02/27 职场文书
企业投资意向书
2015/05/09 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电