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的ob_start();控制您的浏览器cache!
Nov 25 PHP
php 高性能书写
Dec 11 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
在Nginx上部署ThinkPHP项目教程
Feb 02 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
php自动给网址加上链接的方法
Jun 02 PHP
PHP常用技巧汇总
Mar 04 PHP
利用php输出不同的心形图案
Apr 22 PHP
微信支付开发交易通知实例
Jul 12 PHP
php实现的统计字数函数定义与使用示例
Jul 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 解压rar文件及zip文件的方法
2014/05/05 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
django缓存配置的几种方法详解
2018/07/16 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python面向对象程序设计示例小结
2019/01/30 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
python实现可变变量名方法详解
2019/07/01 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
文职个人求职信范文
2013/09/23 职场文书
员工自我鉴定范文
2013/10/06 职场文书
求职信的要素有哪些呢
2013/12/26 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
幼儿园辞职信
2015/05/13 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python