php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法。用法很简单,代码里有详细注释说明,一看就懂

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!--?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'];"

转载于:https://www.cnblogs.com/hengyi123/p/3707732.html

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

  1. php中奖概率算法,刮刮卡/大转盘抽奖算法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法 前言 一.概率算法 二.奖项数组 三.引用输出 总结 前言 以下是我整理的在项目中 ...

  2. paip 刮刮卡砸金蛋抽奖概率算法跟核心流程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! paip ...

  3. php 实现抽奖程序中奖概率算法

    请用PHP的array设计一种结构,用于配置抽奖活动,可以配置每种奖品不同的数量,中奖概率.并用文字或代码简要描述使用此数据结构进行抽奖的逻辑. 中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法) ...

  4. 刮刮乐html5效果擦除,利用HTML5的画布Canvas实现刮刮卡效果

    先给大家展示效果: 你玩过刮刮卡么?一不小心可以中奖的那种.今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果. ...

  5. H5活动刮刮卡功能的实现与注意事项

    7月清仓活动有个刮刮卡的功能.找到了个很好用的插件,但是有个坑搞了我好久.就是当覆盖层是个图片的时候老显示跨域的问题. 先附上页面线上地址. https://m.shandjj.com/index.p ...

  6. 用c#开发微信 (16) 微活动 2 刮刮卡

    微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...

  7. 刮刮卡功能的具体实现

    今天整理之前的代码,忽然看到之前自己写的一个刮刮卡,整理下以便以后使用,同时分享给需要的朋友,如有错误,还请多多指正. 实现的步骤,其实就是徒手画三个图层叠加在一起,最上层是绘制需要的问题,就是以上所 ...

  8. canvas刮刮卡游戏开发

    canvas刮刮卡游戏开发 先看效果: 一.基础知识-画布元素的使用 1 绘制线条 思路 在页面中添加画布元素 获取画布元素的上下文环境对象 使用上下文环境对象绘制图形,保存在内存中 绘制一个线条 / ...

  9. 微信刮刮卡php,微信小程序刮刮卡的实现

    如何实现刮刮卡的效果呢? 思路是: 1.先将中奖的图片或者文字位置和大小确定 2.开始画canvas,将位置和大小跟之前中奖的文案的位置保持一致. 3.在canvas上覆盖一层灰色的蒙层,作出刮刮卡未 ...

最新文章

  1. 项目实践|如何在较暗环境进行人脸检测?
  2. 详细!看看顶级互联网公司都在研究的无服务器架构!
  3. 如何用cmd命令控制mysql数据库
  4. python适合零基础学习吗-Python适合不适合零基础学习呢?老男孩教育
  5. kali linux怎么编译软件包,如何解决Kali Linux apt-get安装:E:无法找到软件包checkinstall...
  6. java web服务_将Java服务公开为Web服务
  7. 关于机器学习的最佳科普文章:《从机器学习谈起》
  8. python的开发者是谁_谁才是真正的资深开发者?
  9. 【软件测试】Homework 1 Briefly describe an error
  10. Linux操作系统使用基础04:文件与目录管理
  11. 专线维护 07/11
  12. LightTools.v5.1_完整好用版本\
  13. Zabbix3.4 通过163邮箱发送邮件监控报警
  14. 使用BitLocker实现磁盘加密、u盘加密、移动硬盘加密
  15. 我觉得,我认为。。。
  16. MFC编程实例二:进度条的使用
  17. php写串口上位机,QT5串口编程—编写简单的上位机
  18. 多频外差法(三频四步相移)
  19. MySQL计算连续3天登陆的用户
  20. 网络营销广告的类型(CPC、CPM、CPA、CPS, CTR)

热门文章

  1. 每天进步一点点——Linux系统时间来处理
  2. 聚类算法之K-means实践
  3. 通过实例看懂diff命令输出
  4. mojoportal升级中用户相关设置
  5. t-sql 调用作业
  6. Ibatis2.0使用说明(二)——配置篇
  7. java 蓝桥杯算法提高 成绩排序2
  8. (37)FPGA花样流水灯设计(第8天)
  9. (13)Verilog程序结构-基本语法(一)(第3天)
  10. (62)Verilog HDL模块例化system Verilog模块