TP5 實現轉盤抽獎

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)我這裏是跑一萬次,我分別跑了好幾次觀察結果是可行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章