一个简单的抽奖概率函数
摘要:该函数主要是判断产生的随机数所在的概率范围...
一个简单的抽奖概率函数:
/**
* 简单的抽奖概率函数
* @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);