标签:
摘要:该函数主要是判断产生的随机数所在的概率范围...
一个简单的抽奖概率函数:
/**
* 简单的抽奖概率函数
* @param array $rewardArray 概率,如:$rewardArray = array(10, 20, 20, 30, 10, 10),对应各奖品的概率
* @return int 概率数组的下标
*/
function luckDraw($rewardArray)
{
$sum = array_sum($rewardArray);
if($sum !== 100)
{
return ‘Error:The sum of values in $rewardArray Must be equal to 100!‘;
}
//获取随机数
$rewardNum = mt_rand(0, $sum - 1);
$totalnum = count($rewardArray);
for($i = 0; $i < $totalnum; $i++)
{
if($i == 0)
{
if($rewardArray[$i] > $rewardNum && $rewardNum >= 0)
{
return $i;
}
}
else
{
$max = $min = 0;
for($j = 0; $j <= $i; $j++)
{
$max = $max + $rewardArray[$j];
}
for($k = 0; $k < $i; $k++)
{
$min = $min + $rewardArray[$k];
}
if($max > $rewardNum && $rewardNum >= $min)
{
return $i;
}
}
}
}
示例:
$rewardArray = array(10, 20, 20, 30, 10, 10); //各概率对应值范围 //10,:0-10 //20:10-30 //20:30-50 //30:50-80 //10:80-90 //10:90-100 echo luckDraw($rewardArray);
标签:
原文地址:http://my.oschina.net/yonghan/blog/474003