php抽奖设置数量,php实现自定义中奖项数和概率的抽奖函数示例
本文实例讲述了php实现自定义中奖项数和概率的抽奖函数。分享给大家供大家参考,具体如下:
/*
* 一个抽奖类,精确到万分之一
* 三个步骤:1.接受一个中奖概率数组;2.接受一个抽奖种子;3.返回中奖等级
*/
class Lottery {
/*
* 中奖概率数组,自动判断奖项数目
* 数组键值和为100,自动计算出不中奖的概率,若初始是超过100抛出一个错误
*/
protected $_rate = array();
/*
* 设置中奖概率,
* @param Array,中奖概率,以数组形式传入
*/
public function setRate($rate = array(12.1, 34)) {
$this->_rate = $rate;
if (array_sum($this->_rate) > 100)//检测概率设置是否有问题
throw new Exception('Winning rate upto 100%');
if (array_sum($this->_rate) < 100)
//定义未中奖情况的概率,用户给的概率只和为100时,则忽略0
$this->_rate[] = 100 - array_sum($this->_rate);
}
/*
* 随机生成一个1-10000的整数种子,提交给中奖判断函数
* @return int,按传入的概率排序,返回中奖的项数
*/
public function runOnce() {
return $this->judge(mt_rand(0, 10000));
}
/*
* 按所设置的概率,判断一个传入的随机值是否中奖
* @param int,$seed 10000以内的随机数
* @return int,$i 按传入的概率排序,返回中奖的项数
*/
protected function judge($seed) {
foreach ($this->_rate as $key => $value) {
$tmpArr[$key + 1] = $value * 100;
}
//将概率乘十后累计,以便随机选择,组合成
$tmpArr[0] = 0;
foreach ($tmpArr as $key => $value) {
if ($key > 0) {
$tmpArr[$key] += $tmpArr[$key - 1];
}
}
for ($i = 1; $i < count($tmpArr); $i++) {
if ($tmpArr[$i - 1] < $seed && $seed <= $tmpArr[$i]) {
return $i; //返回中奖的项数(按概率的设置顺序)
}
}
}
}
$rate = array(33, 20, 2, 0.95, 12, 4.55);
$a = new Lottery;
$a->setRate($rate);
for ($i = 0; $i <= 10000; $i++) {
$b = $a->runOnce();
@$rewards[$b]++;
}
unset($rewards['']);
echo array_sum($rewards);
?>
运行10000次,对比设置概率和中奖次数
设置概率中奖次数<?php echo $rate[0]; ?>%<?php echo $rewards[1] ?><?php echo $rate[1]; ?>%<?php echo $rewards[2] ?><?php echo $rate[2]; ?>%<?php echo $rewards[3] ?><?php echo $rate[3]; ?>%<?php echo $rewards[4] ?><?php echo $rate[4]; ?>%<?php echo $rewards[5] ?><?php echo $rate[5]; ?>%<?php echo $rewards[6] ?><?php echo 'miss'; ?><?php echo $rewards[7] ?>
php抽奖设置数量,php实现自定义中奖项数和概率的抽奖函数示例相关推荐
- php写彩票中奖代码,php实现自定义中奖项数和概率的抽奖函数示例
本文实例讲述了php实现自定义中奖项数和概率的抽奖函数.分享给大家供大家参考,具体如下: /* * 一个抽奖类,精确到万分之一 * 三个步骤:1.接受一个中奖概率数组;2.接受一个抽奖种子;3.返回中 ...
- 用php制作中奖系统,php实现自定义中奖项数和概率的抽奖函数示例
/* * 一个抽奖类,精确到万分之一 * 三个步骤:1.接受一个中奖概率数组;2.接受一个抽奖种子;3.返回中奖等级 */ class Lottery { /* * 中奖概率数组,自动判断奖项数目 * ...
- php抽奖设置数量,php 抽奖算法 奖品数量固定
//这里的算法 这里的概率不是100%,而是 pr/sum(pr) 如:一等奖的概率为0.29% $prize = array(array('level' => 1, 'name' => ...
- R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等
R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如.粗体.斜体等 目录
- EasyExcel 单元格背景颜色、字体颜色使用2种设置颜色方法(IndexedColors中定义的颜色,自定义RGB颜色)实现
1 Maven配置 <!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifa ...
- 自定义预览_为什么NVR预览画面数量少于已经添加的通道数
01视图配置用在哪里? 监控应用中,不少朋友有老王的这种需求,例如酒店.宾馆.超市.店铺.企业等监控场景,前台.保安.收银台等需要查看监控.用户希望所有摄像机都能正常存储,但只开放预览部分监控画面,如 ...
- ecshop flow.php goods_number,修复ECSHOP一重要BUG,当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误...
修复ECSHOP一重要BUG,当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误 例,优惠数量设置如下: 1件 100元 5件 90元 10件 ...
- JSP设置Excel表格换行_Excel中快速将阿拉伯数字转化为大写文字的妙招
在职场办公中,Excel的使用频率可谓是非常高啦.为了保证工作可以按时完成都会学习一些自己需要的Excel技巧来辅助整理表格.今天小编为大家分享怎样快速将Excel表格中的阿拉伯数字转换成大写文字,一 ...
- php-fpm 如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。...
php-fpm未优化网友反映的问题 1.最近将Wordpress迁移至阿里云.由于自己的服务器是云服务器,硬盘和内存都比较小,所以内存经常不够使,通过ps ax命令查看后,发现启动php-fpm进程数 ...
最新文章
- java中冒号是什么意思_css样式表有哪些?css双冒号是什么意思
- Kindeditor小改动
- Arts 第十八周(7/15 ~ 7/21)
- 驱动程序和应用程序之间的体系结构不匹配_修复Win10上的黑屏问题全攻略,并不高深,一看就会...
- 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别
- VTI介质Thomsen参数关于入射角的敏感性曲线
- SqlServer2000中作业无法删除的原因和解决办法
- JS日历控件优化(增加时分秒)
- 科大讯飞输入法解锁高效语音输入
- [渝粤教育] 武汉理工大学 数字信号处理 参考 资料
- POJ2676 Sudoku
- Unity3D跑马灯脚本
- 【bzoj3505】 Cqoi2014—数三角形
- Redis中的Stream的实现Radix Tree源码解读
- 在联想硬盘保护系统7.6版本下 机房系统网络同传实践操作 (二)
- CentOS8安装部署DzzOffice协同办公平台
- 网页里面的空格的代码怎么写
- 阿里程序员试用期被淘汰,原因竟是?
- 移动硬盘数据恢复需多少钱?关于这个不伤钱的方法
- 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步