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 相关文章推荐
php表单转换textarea换行符的方法
Sep 10 PHP
smarty内置函数section的用法
Jan 22 PHP
PHP输出日历表代码实例
Mar 27 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
php字符串的替换,分割和连接方法
May 23 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 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/12/24 PHP
PHP反射实际应用示例
2019/04/03 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
网站上面有这种切换效果
2006/06/26 Javascript
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
python3模块smtplib实现发送邮件功能
2018/05/22 Python
python迭代dict的key和value的方法
2018/07/06 Python
Python中修改字符串的四种方法
2018/11/02 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
企业形象策划方案
2014/05/29 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
年检委托书
2014/08/30 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
研究生导师推荐信
2015/03/25 职场文书
素质教育学习心得体会
2016/01/19 职场文书
Python实现位图分割的效果
2021/11/20 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android