PHP实现分销数组
PHP实现分销数组
在PHP中实现分销数组通常涉及构建多级分销关系的树形结构或扁平化数组。以下是几种常见的实现方法:
构建多级分销树
function buildDistributionTree($users, $parentId = 0) {
$tree = [];
foreach ($users as $user) {
if ($user['parent_id'] == $parentId) {
$children = buildDistributionTree($users, $user['id']);
if ($children) {
$user['children'] = $children;
}
$tree[] = $user;
}
}
return $tree;
}
// 示例数据
$users = [
['id' => 1, 'name' => 'A', 'parent_id' => 0],
['id' => 2, 'name' => 'B', 'parent_id' => 1],
['id' => 3, 'name' => 'C', 'parent_id' => 1],
['id => 4', 'name' => 'D', 'parent_id' => 2]
];
$distributionTree = buildDistributionTree($users);
print_r($distributionTree);
扁平化分销数组
function getDistributionChain($userId, $users) {
$chain = [];
while ($userId != 0) {
foreach ($users as $user) {
if ($user['id'] == $userId) {
array_unshift($chain, $user);
$userId = $user['parent_id'];
break;
}
}
}
return $chain;
}
// 示例
$userChain = getDistributionChain(4, $users);
print_r($userChain);
计算分销佣金
function calculateCommission($userId, $users, $salesAmount, $rates = [0.1, 0.05, 0.03]) {
$commission = 0;
$chain = getDistributionChain($userId, $users);
foreach ($rates as $level => $rate) {
if (isset($chain[$level])) {
$commission += $salesAmount * $rate;
}
}
return $commission;
}
// 示例
$commission = calculateCommission(4, $users, 1000);
echo $commission; // 输出: 180 (1000*0.1 + 1000*0.05 + 1000*0.03)
数据库查询优化
对于大型分销系统,建议使用数据库查询优化:

// 使用递归CTE查询 (MySQL 8.0+)
$sql = "WITH RECURSIVE distribution_tree AS (
SELECT id, name, parent_id, 1 AS level FROM users WHERE id = ?
UNION ALL
SELECT u.id, u.name, u.parent_id, dt.level + 1
FROM users u JOIN distribution_tree dt ON u.parent_id = dt.id
) SELECT * FROM distribution_tree ORDER BY level";
// 使用PDO预处理
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId]);
$distributionNetwork = $stmt->fetchAll(PDO::FETCH_ASSOC);
这些方法可以根据具体业务需求进行调整,适用于多级分销、团队计酬等场景。






