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 pack与unpack 摸板字符字符含义
Oct 29 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
PHP fopen函数用法实例讲解
Feb 15 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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_MySQL教程-第一天
2007/03/18 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
使用js简单实现了tree树菜单
2013/11/20 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
基于vue配置axios的方法步骤
2017/11/09 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
Python中enumerate函数代码解析
2017/10/31 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
教师党员公开承诺书
2014/03/25 职场文书
三万活动总结
2014/04/28 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
大学教师个人总结
2015/02/10 职场文书
党员违纪检讨书
2015/05/05 职场文书
刑事法律意见书
2015/06/04 职场文书