gpt4 book ai didi

php - 从表中获取元素的所有祖先

转载 作者:行者123 更新时间:2023-11-30 22:29:39 25 4
gpt4 key购买 nike

我正在使用 MySQL 数据库在 CodeIgniter 中构建徽章应用程序。有 3 种类型的徽章:1 级、2 级和 3 级徽章。

每个 2 级徽章在您获得所有必需的 1 级徽章后获得,每个 3 级徽章在您获得所有必需的 1 级和 2 级徽章后获得。还有一个 3 级徽章,需要获得 4 个 3 级徽章。

我的徽章关系有以下数据库表:

badge_id - children_id
1 - 20
1 - 25
20 - 40
20 - 45
26 - 40
25 - 39
40 - 50

我需要一个函数来返回徽章的所有祖先。例如,如果函数收到参数 50,它将返回:40、26、20、1。有什么想法吗?

最佳答案

如果想用纯mysql来处理,需要声明一个mysql存储过程,它有一定的深度限制。

相反,我建议使用简单的递归 PHP 函数来返回您需要的内容:

function get_ancestors($child_id, $badges)
{
$found = array();
foreach($badges as $k => $row){
if ($row['children_id'] == $child_id){
$found = array_merge($found, get_ancestors($row['badge_id'], $badges));
$found[] = $row['badge_id'];
}
}
return $found;
}

$badges 变量保存徽章关系表中的所有行,只需从数据库中读取即可。

根据你给出的例子,进行如下调用

get_ancestors(50, $badges);

输出将是:

Array
(
[0] => 1
[1] => 20
[2] => 26
[3] => 40
)

关于php - 从表中获取元素的所有祖先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com