文档章节

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

bengozhong
 bengozhong
发布于 2015/08/21 09:55
字数 663
阅读 75
收藏 9
    <?php  
    /*
     * 经典的概率算法,
     * $proArr是一个预先设置的数组,
     * 假设数组为:array(100,200,300,400),
     * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,  
     * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,
     * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。
     * 这样 筛选到最终,总会有一个数满足要求。
     * 就相当于去一个箱子里摸东西,
     * 第一个不是,第二个不是,第三个还不是,那最后一个一定是。
     * 这个算法简单,而且效率非常 高,
     * 关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。
     */  
    function get_rand($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;   
    }   
      
      
    /*
     * 奖项数组
     * 是一个二维数组,记录了所有本次抽奖的奖项信息,
     * 其中id表示中奖等级,prize表示奖品,v表示中奖概率。
     * 注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,
     * 数组中v的总和(基数),基数越大越能体现概率的准确性。
     * 本例中v的总和为100,那么平板电脑对应的 中奖概率就是1%,
     * 如果v的总和是10000,那中奖概率就是万分之一了。
     *  
     */  
    $prize_arr = array(   
        '0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),   
        '1' => array('id'=>2,'prize'=>'数码相机','v'=>5),   
        '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),   
        '3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),   
        '4' => array('id'=>5,'prize'=>'10Q币','v'=>22),   
        '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),   
    );   
      
    /*
     * 每次前端页面的请求,PHP循环奖项设置数组,
     * 通过概率计算函数get_rand获取抽中的奖项id。
     * 将中奖奖品保存在数组$res['yes']中,
     * 而剩下的未中奖的信息保存在$res['no']中,
     * 最后输出json个数数据给前端页面。
     */  
    foreach ($prize_arr as $key => $val) {   
        $arr[$val['id']] = $val['v'];   
    }   
    $rid = get_rand($arr); //根据概率获取奖项id   
      
    $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项   
    unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项   
    shuffle($prize_arr); //打乱数组顺序   
    for($i=0;$i<count($prize_arr);$i++){   
        $pr[] = $prize_arr[$i]['prize'];   
    }   
    $res['no'] = $pr;   
    print_r($res);   
    ?> 

© 著作权归作者所有

共有 人打赏支持
bengozhong
粉丝 17
博文 463
码字总数 472433
作品 0
深圳
程序员
私信 提问
幸运大转盘-jQuery+PHP实现的抽奖程序

目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的...

蜗牛奔跑
2015/07/06
0
0
JeeWx微信插件-大转盘抽奖活动(要求P3-Weixin框架)

[项目描述] 大转盘是一种抽奖活动类型,本项目要求开发一套界面美观,配置灵活,逻辑严谨的大转盘抽奖活动,可用于微信公众号营销。基本要求如下: 1. 抽奖活动的项目可通过页面配置,包括奖...

Jeecg
2015/11/23
11
0
在微信上呈现大转盘抽奖活动(很简单,速来捡钱)

大转盘是一种抽奖活动类型,本项目要求开发一套界面美观,配置灵活,逻辑严谨的大转盘抽奖活动,主要用于通过微信公众号推广此活动,实现网站用户注册。基本要求如下: 1. 抽奖活动的项目可通...

xl123666
2016/01/25
4
0
在微信上呈现大转盘抽奖活动(很简单,速来捡钱)

大转盘是一种抽奖活动类型,本项目要求开发一套界面美观,配置灵活,逻辑严谨的大转盘抽奖活动,主要用于通过微信公众号推广此活动,实现网站用户注册。基本要求如下: 1. 抽奖活动的项目可通...

xl123666
2016/01/23
6
0
php几个常用的概率算法(抽奖、广告首选)

做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度。同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad、iphon...

蜗牛奔跑
2015/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
3
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
6
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
6
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
5
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部