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 相关文章推荐
让你同时上传 1000 个文件 (二)
Oct 09 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP扩展开发入门教程
Feb 26 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
php通过执行CutyCapt命令实现网页截图的方法
Sep 30 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
JS实现图片预加载无需等待
2012/12/21 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
会计专业推荐信
2013/10/29 职场文书
自我评价正确写法范文
2013/12/10 职场文书
教师实习自我鉴定
2013/12/13 职场文书
生物学专业求职信
2014/07/23 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书