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
相关产品推荐
相关产品推荐

