qq_39880639 2019-07-22 17:17 采纳率: 0%
浏览 293

php 递归查询体系下所有人

有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 请各位帮我看看是哪里出了问题