PHP

php抽奖概率算法

勇康博客网
预计阅读时长 11 分钟
位置: 首页 PHP 正文

抽奖概率算法流程是通过计算概率的和,再生成处于这个范围的随机数。循环判断随机数所处的哪个范围,如果找到就返回当前范围的key,如果没找到就减去当前范围,继续循环找。最后通过key找到对应的奖项。

<?php
 
/**
 * 生成抽奖抽中项
 * @param $proArr
 * @return int|string
 */
function getRand($proArr)
{
    $result = '';
    //概率数组的总概率精度
    $proSum = array_sum($proArr);
    //概率数组循环
    foreach ($proArr as $key => $proCur) {
        // 生成范围内随机值
        $randNum = mt_rand(1, $proSum);
        // 判断是否在当前范围内,如果是记录key,如果不是则在总概率中减去当前范围,并继续判断下一个
        if ($randNum <= $proCur) {
            $result = $key;
            break;
        } else {
            // (缩小范围)
            $proSum -= $proCur;
        }
    }
    unset ($proArr);
    // 返回key
    return $result;
}
 
// 奖项和概率(可以保存到redis的hash中,如果被抽中把除未中奖外的概率置0)
$prizeArr = [
    ['id' => 1, 'prize' => '一等奖', 'v' => 1],
    ['id' => 2, 'prize' => '二等奖', 'v' => 5],
    ['id' => 3, 'prize' => '三等奖', 'v' => 10],
    ['id' => 4, 'prize' => '四等奖', 'v' => 12],
    ['id' => 5, 'prize' => '五等奖', 'v' => 22],
    ['id' => 6, 'prize' => '未中奖', 'v' => 50],
];
 
// 生成id和奖项映射
foreach ($prizeArr as $key => $val) {
    $arr[$val['id']] = $val['v'];
}
 
// 获取抽中的key
$rid = getRand($arr);
// 获取结果
echo $prizeArr[$rid - 1]['prize'];


本文来自投稿,不代表本站立场,如若转载,请注明出处:
-- 展开阅读全文 --
头像
Linux被kdevtmpfsi 挖矿病毒入侵
« 上一篇 2021-08-11
php快速排序法
下一篇 » 2021-08-13
取消
微信二维码
微信二维码
支付宝二维码

发表评论

暂无评论,1501人围观

作者信息

勇康博客网
承接企业、个人,仿站、定制。域名,主机一键代发
TA的最新作品

热门文章

动态快讯

标签列表