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 相关文章推荐
PHP中str_replace函数使用小结
Oct 11 PHP
php 什么是PEAR?(第三篇)
Mar 19 PHP
PHP 中执行排序与 MySQL 中排序
Apr 21 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
php二分查找二种实现示例
Mar 12 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
php动态变量定义及使用
Jun 10 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
PHP有序表查找之插值查找算法示例
Feb 10 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 变量的定义方法
2010/01/26 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
机器学习10大经典算法详解
2017/12/07 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
老兵退伍感言
2015/08/03 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python