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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
laravel学习教程之关联模型
Jul 30 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
Sep 09 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
详解no input file specified 三种解决方法
Nov 29 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
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
浅谈js中的闭包
2015/03/16 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
硕士研究生自我鉴定范文
2013/12/27 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
程序员求职信
2014/04/16 职场文书
法律意见书范文
2015/05/20 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
Python Matplotlib绘制动画的代码详解
2022/05/30 Python
Linux中各个目录的作用与内容
2022/06/28 Servers