当前位置:首页 > PHP

PHP实现分销数组

2026-03-13 14:10:03PHP

PHP实现分销数组

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);

这些方法可以根据具体业务需求进行调整,适用于多级分销、团队计酬等场景。

标签: 数组PHP
分享给朋友:

相关文章

react如何创建数组

react如何创建数组

创建数组的方法 在React中创建数组与普通JavaScript相同,可以使用多种方式。以下是常见的几种方法: 使用数组字面量 const array = [1, 2, 3, 4]; 使用Arra…

java如何定义一个数组

java如何定义一个数组

定义数组的基本语法 在Java中,数组是固定长度的同类型数据集合。定义数组需要指定数据类型和数组名称,并可以选择直接初始化或稍后分配空间。 // 声明数组但不初始化 数据类型[] 数组名; //…

java如何返回数组

java如何返回数组

返回数组的方法 在Java中,可以通过多种方式返回数组。以下是几种常见的方法: 直接返回数组 定义一个方法,返回类型为数组类型,直接在方法内部创建并返回数组。 public int[] getI…

vue实现数组置顶操作

vue实现数组置顶操作

实现数组置顶的方法 在Vue中实现数组置顶操作,可以通过多种方式完成。以下是几种常见的实现方法: 使用数组的splice和unshift方法 // 假设有一个数组items const index…

vue怎样实现数组绑定

vue怎样实现数组绑定

Vue 实现数组绑定的方法 Vue 提供了多种方式来实现数组的绑定,以下是常见的几种方法: 使用 v-for 指令绑定数组 通过 v-for 指令可以遍历数组并渲染列表。语法如下: <ul&…

原生加数组实现vue

原生加数组实现vue

使用原生 JavaScript 和数组实现 Vue 的核心功能 Vue 的核心功能包括数据响应式、模板渲染和指令绑定。通过原生 JavaScript 和数组可以模拟部分功能,以下是一个简化版的实现方式…