php 无限级分类 获取顶级分类ID
在数据库表中,我们常常会遇到分类信息,其中每一类别都有它自己的ID,一个上级分类的ID,以及对应的名称。最近,我遇到一个问题,那就是如何优雅地获取一个给定分类ID的顶级分类ID。
假设我们有一个分类表,其中包含了id(分类ID)、name(分类名称)和pid(上级分类ID)等字段。我们的任务就是要找到给定分类ID的顶级分类ID。例如,“新鲜水果”这个分类的ID是13,其父类ID是5,而5的父ID是1,这样我们就可以找到顶级分类的ID。
我曾经尝试过使用递归和缓存来解决这个问题,但那些方法都有些复杂。直到有一天,我灵机一动,找到了一个更优雅、更简洁的解决方案。
以下是PHP代码的实现:
我们从数据库中查询出所有的分类信息,并将结果整理成一个数组,数组的键是分类ID,值是上级分类ID。
```php
$sql = "select id, pid from tablename";
// 执行查询后得到结果,处理成如下数组格式
$arr = [
// id => pid
1 => 0,
// 省略其他分类...
5 => 1,
// 省略其他分类...
13 => 5
];
// 建议将这数组缓存起来以提高效率
```
然后,给定一个分类ID,我们可以使用while循环遍历数组,直到找到顶级分类的ID。在这个过程中,我们只需要两行代码就可以完成。
```php
$id = 13; // 给定的分类ID
while($arr[$id]) {
$id = $arr[$id]; // 获取当前分类的上级分类ID
}
echo $id; // 输出顶级分类的ID,这里是1
```
这个解决方案简单而高效,不仅让我自己感到惊讶,也让我的同事大为赞叹。他之前写的几十行代码的递归和判断代码被这两行代码替代了,真是让人叹为观止。在这个简单的解决方案面前,复杂的代码显得如此笨拙和冗余。这就是优雅的编程艺术!
编程语言
- php 无限级分类 获取顶级分类ID
- vue.js 获取当前自定义属性值
- PHP通过微信跳转的Code参数获取用户的openid(关键代
- 微信小程序实现底部导航
- ASP中获得Select Count语句返回值的方法
- javascript insertAfter()定义与用法示例
- Ajax获取响应内容长度的方法
- Angular.JS中指令ng-if的注意事项小结
- jquery trigger函数执行两次的解决方法
- ThinkPHP采用GET方式获取中文参数查询无结果的解决
- 打开页面就是全屏的方法
- AngularJS利用Controller完成URL跳转
- NodeJS自定义模块写法(详解)
- jQuery中iframe的操作(点击按钮新增窗口)
- Oracle 10g各个帐号的访问权限、登录路径、监控状
- JSP 不能解析EL表达式的解决办法