直接上代码:
<?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微砍价活动砍价算法-类似微信红包算法