大转盘方式的抽奖是经常见的,,最近在做了一个抽奖的功能,其中最重要的就是概率,概率的算法大同小异,,为保证每个奖品都可抽完,下面就是我写一个算法
function getRand(array $products,$flage){
//1、计算总中奖概率
$chanceSum = array_sum($arr);//所有奖品的概率总和,
//2、计算每个奖品的中奖率
foreach($prducts as $value){
if($value['chance']<=0)//概率值小于等于0。返回false表示未中奖
{
continue;
}else{
$randNum = mt_rand(1,$chanceSum );//随机抽取
if($randNum <=$value['chance']){ //循环获取到的概率小于等于随机抽取到的概率表示中奖
return $value;
}else{//此时概率发生变化(其中某个奖品的库存为0时,总的概率减去奖品为0的概率)
if($flag){
$chanceSum - = $value['chance'];
}
}
}
}
return false;
}