1、實現
轉盤分多種情況,常見的有 單純計算機率 和 限制數量
1.1、單純結算機率的實現
1)計算出總概率的精度M
2)然後將所有的概率數組依次遍歷
3)遍歷中隨機取出一個1~M的數字
4)如果隨機數比當前這個數概率小,則表示命中。
5)反之則將總精度減去當前未命中的概率,表示剩餘的總概率
總精度是爲了生成隨機數,而減去未命中的概率是爲了排除出去,最後必定會命中
1.1.1、代碼實現
/**
* 返回轉盤抽獎結果
* @param array $proArr 概率數組
* @return int|string 返回對應數組的下標
*/
private function getRandPrize($proArr)
{
$result = '';
//概率數組的總概率精度
$proSum = array_sum($proArr);
//概率數組循環
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
1.1.2、測試
1)我們可以看出已經很接近對應的概率了。
2)我這裏是跑一萬次,我分別跑了好幾次觀察結果是可行的。