此算法为之前写的,现在整理了下不对之处,欢迎指导

思路:

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;
       }
    }
}