//红包金额,红包数量
function generateRedPackets($totalAmount, $count) {
$min=0.01;
if ($count <= 0 || $totalAmount <= 0) {
return false;
}
if($totalAmount/$count<0.01)return false;
$redPackets = [];
$remainingAmount = $totalAmount;
$remainingCount = $count;
for ($i = 0; $i < $count - 1; $i++) {
$max = $remainingAmount / $remainingCount * 2;
//echo "{$i}.{$max}<br>";
$randomAmount = mt_rand(1, intval($max*100)) / 100;
$redPackets[] = round($randomAmount, 2);
$remainingAmount -= $randomAmount;
$remainingCount--;
}
$redPackets[] = round($remainingAmount, 2);
if (abs(array_sum($redPackets) - $totalAmount)>$min || min($redPackets)<$min) {
return generateRedPackets($totalAmount, $count);
}
return $redPackets;
}
因项目需要做一个随机红包功能,传入指定金额和指定红包数量,来生成随机的红包
用法:
$rt=generateRedPackets(1,11);
print_r($rt);
结果如如下:
Array
(
[0] => 0.06
[1] => 0.12
[2] => 0.17
[3] => 0.11
[4] => 0.1
[5] => 0.02
[6] => 0.11
[7] => 0.05
[8] => 0.16
[9] => 0.01
[10] => 0.09
)

491

被折叠的 条评论
为什么被折叠?



