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 相关文章推荐
信用卡效验程序
Oct 09 PHP
关于mysql 字段的那个点为是定界符
Jan 15 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
php smarty模版引擎中的缓存应用
Dec 11 PHP
php whois查询API制作方法
Jun 23 PHP
PHP缓存技术的多种方法小结
Aug 14 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
Yii操作数据库的3种方法
Mar 11 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
php实现多维数组排序的方法示例
Mar 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 日常开发小技巧
2009/09/23 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
简单学习vue指令directive
2016/11/03 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
Python 自动化表单提交实例代码
2017/06/08 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
python super的使用方法及实例详解
2019/09/25 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
python3中数组逆序输出方法
2020/12/01 Python
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
初三家长会邀请函
2014/01/18 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
团拜会策划方案
2014/06/07 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
python_tkinter弹出对话框创建
2022/03/20 Python
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript