php抽奖概率算法(刮刮卡,大转盘)


Posted in PHP onApril 17, 2020

本文实例为大家分享了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,用法很简单,代码里有详细注释说明,供大家参考,具体内容如下

<?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); 
?>

想要学习更多关于抽奖功能的实现,请参考此专题:抽奖功能

以上就是php抽奖概率算法的全部内容,希望对大家学习php程序设计有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
php中explode的负数limit用法分析
Feb 27 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 #PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 #PHP
PHP生成静态HTML文档实现代码
Jun 23 #PHP
PHP微信支付开发实例
Jun 22 #PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 #PHP
PHP树-不需要递归的实现方法
Jun 21 #PHP
PHP MySql增删改查的简单实例
Jun 21 #PHP
You might like
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP新手上路(八)
2006/10/09 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 调用DLL操作抄表机
2009/01/12 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python数据处理实战(必看篇)
2017/06/11 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
数学系个人求职信范文
2014/01/30 职场文书
人事专员的岗位职责
2014/03/01 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
vue实现拖拽交换位置
2022/04/07 Vue.js