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中变量及部分适用方法
Mar 27 PHP
php抓取页面的几种方法详解
Jun 17 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
php+mysql实现无限级分类
Nov 11 PHP
ThinkPHP中session函数详解
Sep 14 PHP
php类的自动加载操作实例详解
Sep 28 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 PHP
详解PHP队列的实现
Mar 14 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 04 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
jstree的简单实例
2016/12/01 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
简介Django中内置的一些中间件
2015/07/24 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python 反向输出字符串的方法
2018/07/16 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
办公室保洁员岗位职责
2013/12/02 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
环保建议书400字
2014/05/14 职场文书
音乐节策划方案
2014/06/09 职场文书
写得不错的求职信范文
2014/07/11 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
六年级情感作文之500字
2019/10/23 职场文书
python glom模块的使用简介
2021/04/13 Python