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 相关文章推荐
3
Oct 09 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
php解决约瑟夫环示例
Apr 09 PHP
PHP实现多图片上传类实例
Jul 26 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
php socket通信(tcp/udp)实例分析
Feb 14 PHP
php验证码生成器
May 24 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
php探针使用原理和技巧讲解
Sep 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中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
详解python中的装饰器
2018/07/10 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
python实例化对象的具体方法
2020/06/17 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
销售类个人求职信范文
2013/09/25 职场文书
销售人员个人求职信
2013/09/26 职场文书
连锁经营管理专业大学生求职信
2013/10/30 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
会计电算化专业求职信
2014/06/10 职场文书
专题组织生活会方案
2014/06/15 职场文书
代收款委托书范本
2014/10/01 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS