TP5 实现转盘抽奖

作者: 华仔233 | 来源:发表于2020-12-11 09:42 被阅读0次

    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)我这里是跑一万次,我分别跑了好几次观察结果是可行的。

    相关文章

      网友评论

        本文标题:TP5 实现转盘抽奖

        本文链接:https://www.haomeiwen.com/subject/mygdgktx.html