PHP 递归算法计算分销用户权重总和
function calculatePowerSum(array $users, int $userId): array
{
$powerSums = [];
foreach ($users as $user) {
if ($user['superior_user_id'] === $userId) {
$powerSums[] = $user['user_power'] + calculatePowerSum($users, $user['id'])['sum'];
}
}
return ['sum' => array_sum($powerSums), 'details' => $powerSums];
}
$users = [
['id' => 141, 'superior_user_id' => '0', 'user_power' => '10.000000'],
['id' => 142, 'superior_user_id' => '141', 'user_power' => '1.000000'],
['id' => 143, 'superior_user_id' => '142', 'user_power' => '2.000000'],
['id' => 144, 'superior_user_id' => '143', 'user_power' => '3.000000'],
['id' => 145, 'superior_user_id' => '144', 'user_power' => '4.000000'],
['id' => 146, 'superior_user_id' => '145', 'user_power' => '5.000000'],
['id' => 147, 'superior_user_id' => '146', 'user_power' => '6.000000'],
['id' => 148, 'superior_user_id' => '141', 'user_power' => '7.000000'],
['id' => 149, 'superior_user_id' => '148', 'user_power' => '8.000000'],
['id' => 150, 'superior_user_id' => '149', 'user_power' => '9.000000'],
['id' => 151, 'superior_user_id' => '150', 'user_power' => '10.000000'],
['id' => 152, 'superior_user_id' => '151', 'user_power' => '11.000000'],
['id' => 153, 'superior_user_id' => '152', 'user_power' => '12.000000'],
['id' => 154, 'superior_user_id' => '141', 'user_power' => '13.000000'],
['id' => 155, 'superior_user_id' => '154', 'user_power' => '14.000000'],
['id' => 156, 'superior_user_id' => '155', 'user_power' => '15.000000'],
['id' => 157, 'superior_user_id' => '156', 'user_power' => '16.000000'],
['id' => 158, 'superior_user_id' => '157', 'user_power' => '17.000000'],
['id' => 159, 'superior_user_id' => '158', 'user_power' => '18.000000'],
['id' => 160, 'superior_user_id' => '142', 'user_power' => '19.000000'],
['id' => 161, 'superior_user_id' => '143', 'user_power' => '20.000000'],
['id' => 162, 'superior_user_id' => '144', 'user_power' => '21.000000'],
['id' => 163, 'superior_user_id' => '145', 'user_power' => '22.000000'],
['id' => 164, 'superior_user_id' => '146', 'user_power' => '23.000000'],
['id' => 165, 'superior_user_id' => '148', 'user_power' => '24.000000'],
['id' => 166, 'superior_user_id' => '149', 'user_power' => '25.000000'],
['id' => 167, 'superior_user_id' => '150', 'user_power' => '26.000000'],
['id' => 168, 'superior_user_id' => '151', 'user_power' => '27.000000'],
['id' => 169, 'superior_user_id' => '152', 'user_power' => '28.000000'],
];
$powerSum = calculatePowerSum($users, 141);
echo '每条支线分销的user_power总和:' . PHP_EOL;
print_r($powerSum['details']);
echo '总和:' . $powerSum['sum'];
这段代码使用递归函数 calculatePowerSum 计算 id=141 用户每条支线分销的 user_power 总和,并以数组形式返回结果。数组中包含 sum 和 details 两个键值。sum 表示所有支线总和,details 则是每个支线分销的 user_power 总和。
代码中首先定义一个空数组 $powerSums 来存储每个支线分销的 user_power 总和。然后,遍历用户数组 $users,寻找 superior_user_id 为 $userId 的用户。如果找到,则将当前用户 user_power 和其下级用户 user_power 总和相加,并将结果存入 $powerSums 数组。最后,使用 array_sum 函数计算所有支线分销的 user_power 总和,并将结果存入 $sum 变量。
该代码使用了递归函数,并使用 return 语句返回一个包含 sum 和 details 两个键值对的数组。sum 表示所有支线分销的 user_power 总和,details 则是每个支线分销的 user_power 总和的数组。
通过这种方式,您可以轻松地获取指定用户所有直推下级用户权重总和,并以数组形式返回结果。
原文地址: https://www.cveoy.top/t/topic/I3L 著作权归作者所有。请勿转载和采集!