有id,parent_id 两个字段 已知祖宗id, 查出他下面所有成员,比如所有b,b下面所有c ,c下面所有d 等等 ,求最后总数 用递归怎么写
1条回答 默认 最新
- 你知我知皆知 2024-08-11 19:39关注
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这是一个典型的树结构问题,我们可以使用递归来解决。以下是一个简单的PHP实现:
<?php function getSubordinates($parentId) { $subordinates = []; // 遍历父节点的所有子节点 foreach (getChildren($parentId) as $childId => $childData) { // 如果当前子节点的父节点等于给定的父节点ID,则将其添加到结果数组中 if ($childData['parent_id'] === $parentId) { array_push($subordinates, $childData); } // 调用递归函数处理其子节点 if (!empty($subordinates)) { array_push($subordinates, ...getSubordinates($childData['id'])); } } return $subordinates; } function getChildren($parentId) { // 查询父节点的所有子节点 $children = db_query("SELECT * FROM $table WHERE parent_id = ?", [$parentId]); // 将查询结果转换为数组并返回 return $children->fetchAll(PDO::FETCH_ASSOC); }
在这个例子中,我们首先定义了一个
getSubordinates()
函数来获取一个特定父节点的所有子节点,并将这些子节点添加到一个名为$subordinates
的数组中。然后,我们定义了另一个
getChildren()
函数来遍历父节点的所有子节点,并调用getSubordinates()
函数处理它们的子节点。这样,我们就可以得到这个父节点及其所有子节点。注意:你需要根据你的数据库表名和字段名进行相应的修改。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
- ¥15 大智慧怎么编写一个选股程序
- ¥100 python 调用 cgps 命令获取 实时位置信息
- ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
- ¥15 C语言使用vscode编码错误
- ¥15 用KSV5转成本时,如何不生成那笔中间凭证
- ¥20 ensp怎么配置让PC1和PC2通讯上
- ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
- ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
- ¥15 请各位帮我看看是哪里出了问题