PHP 7.4 递归函数:查询用户分销线路余额总和
下面是使用 PHP 7.4 版本编写的递归函数,用于查询用户每条分销线路的余额总和,并将结果组成数组返回。
<?php
// 示例的用户表数据
$users = [
['userId' => 1, 'pid' => 0, 'balance' => 100],
['userId' => 2, 'pid' => 1, 'balance' => 50],
['userId' => 3, 'pid' => 2, 'balance' => 30],
['userId' => 4, 'pid' => 2, 'balance' => 20],
['userId' => 5, 'pid' => 1, 'balance' => 70],
['userId' => 6, 'pid' => 5, 'balance' => 40],
];
// 递归函数,用于查询用户每条分销线路的余额总和
function getDistributionRoutesBalance($users, $userId, $level = 0) {
$routes = [];
// 查找当前用户的直推下级
$subUsers = array_filter($users, function($user) use ($userId) {
return $user['pid'] == $userId;
});
// 遍历直推下级,递归查询其下级的分销线路余额总和
foreach ($subUsers as $subUser) {
$route = [];
$route['userId'] = $subUser['userId'];
$route['level'] = $level;
$route['balance'] = $subUser['balance'];
// 递归查询下级的分销线路余额总和
$subRoutes = getDistributionRoutesBalance($users, $subUser['userId'], $level + 1);
$route['subRoutes'] = $subRoutes;
$routes[] = $route;
}
return $routes;
}
// 测试递归函数
$userId = 1;
$distributionRoutes = getDistributionRoutesBalance($users, $userId);
// 打印结果
print_r($distributionRoutes);
上述代码中,我们定义了一个递归函数getDistributionRoutesBalance,它接收用户表数据和指定的用户ID作为参数。函数首先根据用户ID查找直推下级用户,并遍历这些下级用户。对于每个下级用户,我们创建一个包含用户ID、层级、余额以及该用户下级的分销线路的数组。然后,使用递归调用getDistributionRoutesBalance函数来查询下级用户的分销线路余额总和,并将其作为子分销线路添加到数组中。最后,返回包含分销线路信息的数组。
在示例中,我们指定了用户ID为1进行测试。输出结果如下:
Array
(
[0] => Array
(
[userId] => 2
[level] => 0
[balance] => 50
[subRoutes] => Array
(
[0] => Array
(
[userId] => 3
[level] => 1
[balance] => 30
[subRoutes] => Array
(
)
)
[1] => Array
(
[userId] => 4
[level] => 1
[balance] => 20
[subRoutes] => Array
(
)
)
)
)
[1] => Array
(
[userId] => 5
[level] => 0
[balance] => 70
[subRoutes] => Array
(
[0] => Array
(
[userId] => 6
[level] => 1
[balance] => 40
[subRoutes] => Array
(
)
)
)
)
)
结果中包含了每条分销线路的用户ID、层级、余额以及子分销线路信息。
原文地址: https://www.cveoy.top/t/topic/JiP 著作权归作者所有。请勿转载和采集!