美文网首页
PHP实现中奖概率算法

PHP实现中奖概率算法

作者: 罗盘上的方向 | 来源:发表于2017-01-17 16:53 被阅读298次

假设我们的奖品是如下:

$prize = array(   
    '0' => array('id'=>1,'prize'=>'ipad','v'=>1),   
    '1' => array('id'=>2,'prize'=>'iphone9','v'=>5),   
    '2' => array('id'=>3,'prize'=>'小米音箱','v'=>10),   
    '3' => array('id'=>4,'prize'=>'4GU盘','v'=>12),   
    '4' => array('id'=>5,'prize'=>'10Q币','v'=>22),   
    '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),   
);   

v表示中奖占比,比如说所有v加起来是100,而这里的ipad为1,表示中奖概率为1%。

算法思路
$data为一个预设的数组,假设数组为[100,200,300,400],最开始数据从1,1000这个范围内选一个数出来,如果不在这个范围内,则缩小范围,在这个例子中就是减去100,也就是第二个数在1,900这个范围内筛选,这样一直下去总会有一个满足要求。相当于在一个盒子里拿小球,第一个不是,第二个不是,第三个不是。。。全部取完,总会有一个是。

 function gen_rand($data) {
        $result = '';
        $sum = array_sum($data); //计算总权重
        foreach($data as $key => $val) {
            $randNum = mt_rand(1, $sum);
            if($randNum <= $val) {
                $result = $key;
                break;
            } else {
                $sum -= $val;
            }
        }
        unset($data);
        return $result;
    }

生成$data数组的方法

$keys = array_keys($prize);
$vals = array_column($prize, 'v');
$data = array_combine($keys,$vals);

相关文章

  • php实现刮刮卡大转盘抽奖概率

    php实现刮刮卡大转盘抽奖概率 本文实例为大家分享了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,用法很简单...

  • PHP实现中奖概率算法

    假设我们的奖品是如下: v表示中奖占比,比如说所有v加起来是100,而这里的ipad为1,表示中奖概率为1%。 算...

  • php实现中奖概率

    抽奖有中奖或者未中奖两种状态,写一个函数,运行该函数,有80%的几率返回1(中奖),20%返回0(未中奖)。 关键...

  • 中奖概率算法

    中奖概率算法: 奖品 中奖概率A 0B 10C 1D 0E ...

  • php实现抽奖的简单概率算法

    配置数组(v代表概率) $prize_arr = array( '0' => array('id'=>1,'pri...

  • 2018-08-02

    php实现组合枚举算法 源码

  • PHP+Ajax幸运大转盘抽奖源码

    中国风水墨画背景PHP+Ajax幸运大转盘抽奖源码,通过奖品库存、中奖次数来计算中奖概率。恭喜你,中得五等奖,还要...

  • 常用的排序算法

    常用的排序算法(PHP实现)_慕课手记

  • 关于抽奖概率的测试

    抽奖程序设定的算法:把设定的中奖概率从小到大排序(0.1、0.15、0.25、0.5),划分区间([0,0...

  • 算法可视化-JavaSwing

    1、三门问题 三门问题: 答案: 2、中奖概率问题 问题: 答案: 解答: 3、快速排序 算法步骤: 4、选择排序...

网友评论

      本文标题:PHP实现中奖概率算法

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