$total = 7;//总金额
$num = 13;//红包总个数
$min = 0.01;//红包最小数金额,可定义
$arr = array_fill(0, $num, $min);//用数组表示每人的红包,先设定每个人最小红包,保证每人一定能领到最小的红包
$total -= $min * $num;//减去预先分配给众人的最小红包总数
while ($total > 0.0) {
$index = rand(0, $num - 1);//随机找人索引
$seek = rand($min * 100, round($total / $num, 2) * 100) / 100;//随机种子
$arr[ $index ] += min($seek, $total);//把种子播某个人身上,红包金额累加
$total -= $seek;
}
echo '红包分布如下:',PHP_EOL;
print_r($arr);//打印每个人身上的红包详细
echo '红包的总金额:', array_sum($arr);//验证红包的总数量
die;
输出结果:
红包分布如下:
Array
(
[0] => 0.09
[1] => 0.61
[2] => 0.97
[3] => 0.32
[4] => 0.33
[5] => 0.65
[6] => 0.56
[7] => 0.15
[8] => 0.67
[9] => 0.57
[10] => 0.58
[11] => 0.8
[12] => 0.7
)
红包的总金额:7