此算法为之前写的,现在整理了下不对之处,欢迎指导
思路:
1.拿到概率值;
2.算出概率值和 乘以倍数放大概率取值MAX让概率更均匀
3算出当前概率值所在的概率段 比对如果匹配返出概率所在KEY
/*
[award 抽奖]
@Author Jerry
@DateTime 2018-06-07T10:03:34+0800
@Example eg:
@param [type] $probability [每个奖品概率数组[50,10,5,20,1,9,50]总和可以超过100]
@return [type] [description]
/
function award($probability){
$multiple = 10000;#倍数,放大随机数值,让概念均匀
$sumProbability = array_sum($probability)$multiple;##增大概率值
$num = rand(1,$sumProbability);##数值越大,概念越均匀
$maxNum = 0;
foreach ($probability as $k => $v) {
//当前将项最大值
$maxNum = $v$multiple+$maxNum;
if($num<=$maxNum){
return $k;
}
}
}