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

PHP递归获取推荐团队数组:实现单次返回完整结构求助

解决递归遍历推荐用户后仅返回一次完整数组的问题

核心修改思路

将递归函数从中途多次输出数组改为逐层收集数据,最终统一返回完整数组:让每个递归调用返回当前层级及所有子层级的用户数据,上层调用合并子层级结果,最后顶层调用一次性获取完整数据。

修改后的函数代码

function referralincome($uid, $team = [], $level = 1) {
    // 确保数据库连接已初始化($conn为全局或传入的连接对象)
    global $conn;
    
    // 防SQL注入:转义用户ID
    $safeUid = mysqli_real_escape_string($conn, $uid);
    $sql = "SELECT id, name, referral_id FROM users WHERE referral_id = $safeUid";
    $result = mysqli_query($conn, $sql);
    
    while ($row = mysqli_fetch_assoc($result)) {
        // 标记当前用户的推荐层级
        $row['level'] = $level;
        // 将当前用户加入团队数组
        $team[] = $row;
        // 递归遍历当前用户的下级推荐人,合并返回的子团队数据
        $team = referralincome($row['id'], $team, $level + 1);
    }
    
    // 递归结束时返回已收集的所有数据
    return $team;
}

使用方式

调用函数后仅需输出一次结果:

// 获取完整的推荐团队数据
$fullTeam = referralincome(1, [], 1);
// 一次性输出完整数组
print_r($fullTeam);

适配说明(基于提供的表结构与测试数据)

假设用户表结构为:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    referral_id INT DEFAULT 0 COMMENT '推荐人ID'
);

测试数据示例:

INSERT INTO users (name, referral_id) VALUES
('用户A', 0),
('用户B', 1),
('用户C', 1),
('用户D', 2),
('用户E', 4);

调用referralincome(1, [], 1)会返回包含用户B(层级1)、C(层级1)、D(层级2)、E(层级3)的完整数组,无中途输出。

内容的提问来源于stack exchange,提问作者mustryy official

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:25:34