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 相关文章推荐
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
php 数组随机取值的简单实例
May 23 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
PHP对象相关知识总结
Apr 09 PHP
php实现的二叉树遍历算法示例
Jun 15 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
php微信公众号开发之现金红包
Apr 16 PHP
php文件包含的几种方式总结
Sep 19 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 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截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
php生成随机密码的几种方法
2011/01/17 PHP
使用PHP开发留言板功能
2019/11/19 PHP
js停止输出代码
2008/07/20 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
python实现ftp文件传输功能
2020/03/20 Python
python怎么自定义捕获错误
2020/06/29 Python
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
优秀党员主要事迹
2014/01/19 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
情侣吵架检讨书
2014/02/05 职场文书
精神文明建设标语
2014/06/16 职场文书
春秋淹城导游词
2015/02/11 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
日元符号 ¥
2022/02/17 杂记