直接上代码:
<?php
/**
* 获取随机金额
* @param $remainSize
* @param $remainMoney
* @param $min
* @return int
*/
function _getRandomMoney($remainSize, $remainMoney, $min = 1)
{
if ($remainSize == 1) {//只剩一次,直接返回剩余金额
return $remainMoney;
}
$max = $remainMoney / $remainSize * 2;//最大金额为:(剩余金额/剩余次数)* 2
$money = _randomFloat() * $max;//产生随机的金额
$money = $money <= $min ? $min : $money;//如果比要求的最小的金额还小,则取最小金额
$money = floor($money * 100) / 100;
return (int)$money;//如果要做成微信红包功能,则把(int)去除即可,传入的$min改为:0.01
}
/**
* 获取一个随机的两位小数
* @return float
*/
function _randomFloat()
{
return round(mt_rand(1, 100) / 100, 2);
}
//随机运行200次
$count = 200;
for ($i = 0; $i < $count; $i++) {
$remainSize = 40;//每一轮剩余次数为40次
$remainMoney = 2400;//剩余金额为2400
$min = 1;//每次随机生成的最小金额
$sum = 0;//累计值
echo "<hr/>";
while ($remainSize) {
$money = _getRandomMoney($remainSize, $remainMoney, $min);
$sum += $money;
$remainMoney -= $money;
echo str_pad($money, 4, '_', 0) . "|";
$remainSize -= 1;
}
}
echo "<hr/>";
转载请注明:MitNick » php微砍价活动砍价算法-类似微信红包算法