php 无限级分类 获取顶级分类ID

网络编程 2025-03-13 11:38www.168986.cn编程入门

在数据库表中,我们常常会遇到分类信息,其中每一类别都有它自己的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

```

这个解决方案简单而高效,不仅让我自己感到惊讶,也让我的同事大为赞叹。他之前写的几十行代码的递归和判断代码被这两行代码替代了,真是让人叹为观止。在这个简单的解决方案面前,复杂的代码显得如此笨拙和冗余。这就是优雅的编程艺术!

上一篇:vue.js 获取当前自定义属性值 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by