You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写递归函数遍历邻接表获取指定上级的所有下线用户ID

如何用递归函数获取指定Upline下的所有下线用户ID

刚好我之前也处理过类似的层级遍历需求,给你调整一下代码就能实现递归获取所有下线啦!

先理清楚逻辑:我们需要从指定的upline_id开始,先拿到它的直接下线,然后对每个直接下线再递归获取它们的下线,直到没有子节点为止,最后把所有收集到的下线ID整理成数组返回。

修改后的递归函数代码

public function downline($id, $array = []) { 
    $lineModel = CLONEAPI::getModel( 'line' ); 
    // 注意:这里要确保getAllById是根据upline_id来查询直接下线的方法
    // 如果你的方法逻辑不是这样,得改成对应查询upline_id的方法,比如getDownlinesByUplineId($id)
    $data = $lineModel->getAllById($id); 

    if (!empty($data)) { 
        foreach ($data as $child) { 
            // 把当前下线的ID加入结果数组(如果需要完整用户信息,直接存$child即可)
            $array[] = $child['downline_id']; 
            // 递归调用:用当前下线的ID作为新的upline_id,继续获取它的下线
            $array = $this->downline($child['downline_id'], $array); 
        } 
    }
    // 返回最终收集到的所有下线ID数组
    return $array; 
}

关键细节说明

  • 默认参数初始化:给$array设了默认值[],这样调用的时候直接写$this->downline(1)就能获取upline=1的所有下线,不用手动传空数组
  • 递归终止条件:当某个节点没有下线时($data为空),函数会直接返回当前的数组,递归就会逐层往上结束
  • 方法逻辑确认:一定要保证getAllById是根据传入的upline_id查询对应的直接下线记录,如果你的原方法是按line_id查询的,记得改成对应查询upline_id的方法,不然逻辑会出错
  • 可选优化:如果担心有重复ID(虽然你的表结构看起来不会出现),可以在返回前加return array_unique($array);来去重

调用示例

比如你要获取upline ID为1的所有下线,直接调用:

$allDownlines = $this->downline(1);
// 结果会是 [2,3,4,5,6],和你预期的一致

内容的提问来源于stack exchange,提问作者benjamin wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:42:57