本文实例讲述了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实现自定义中奖项数和概率的抽奖函数示例相关推荐

  1. php写彩票中奖代码,php实现自定义中奖项数和概率的抽奖函数示例

    本文实例讲述了php实现自定义中奖项数和概率的抽奖函数.分享给大家供大家参考,具体如下: /* * 一个抽奖类,精确到万分之一 * 三个步骤:1.接受一个中奖概率数组;2.接受一个抽奖种子;3.返回中 ...

  2. 用php制作中奖系统,php实现自定义中奖项数和概率的抽奖函数示例

    /* * 一个抽奖类,精确到万分之一 * 三个步骤:1.接受一个中奖概率数组;2.接受一个抽奖种子;3.返回中奖等级 */ class Lottery { /* * 中奖概率数组,自动判断奖项数目 * ...

  3. php抽奖设置数量,php 抽奖算法 奖品数量固定

    //这里的算法 这里的概率不是100%,而是 pr/sum(pr) 如:一等奖的概率为0.29% $prize = array(array('level' => 1, 'name' => ...

  4. R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等

    R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如.粗体.斜体等 目录

  5. EasyExcel 单元格背景颜色、字体颜色使用2种设置颜色方法(IndexedColors中定义的颜色,自定义RGB颜色)实现

    1 Maven配置 <!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifa ...

  6. 自定义预览_为什么NVR预览画面数量少于已经添加的通道数

    01视图配置用在哪里? 监控应用中,不少朋友有老王的这种需求,例如酒店.宾馆.超市.店铺.企业等监控场景,前台.保安.收银台等需要查看监控.用户希望所有摄像机都能正常存储,但只开放预览部分监控画面,如 ...

  7. ecshop flow.php goods_number,修复ECSHOP一重要BUG,当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误...

    修复ECSHOP一重要BUG,当商品设置数量优惠时,加入不同属性的商品数量优惠判断错误 例,优惠数量设置如下: 1件             100元 5件              90元 10件  ...

  8. JSP设置Excel表格换行_Excel中快速将阿拉伯数字转化为大写文字的妙招

    在职场办公中,Excel的使用频率可谓是非常高啦.为了保证工作可以按时完成都会学习一些自己需要的Excel技巧来辅助整理表格.今天小编为大家分享怎样快速将Excel表格中的阿拉伯数字转换成大写文字,一 ...

  9. php-fpm 如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。...

    php-fpm未优化网友反映的问题 1.最近将Wordpress迁移至阿里云.由于自己的服务器是云服务器,硬盘和内存都比较小,所以内存经常不够使,通过ps ax命令查看后,发现启动php-fpm进程数 ...

最新文章

  1. java中冒号是什么意思_css样式表有哪些?css双冒号是什么意思
  2. Kindeditor小改动
  3. Arts 第十八周(7/15 ~ 7/21)
  4. 驱动程序和应用程序之间的体系结构不匹配_修复Win10上的黑屏问题全攻略,并不高深,一看就会...
  5. 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别
  6. VTI介质Thomsen参数关于入射角的敏感性曲线
  7. SqlServer2000中作业无法删除的原因和解决办法
  8. JS日历控件优化(增加时分秒)
  9. 科大讯飞输入法解锁高效语音输入
  10. [渝粤教育] 武汉理工大学 数字信号处理 参考 资料
  11. POJ2676 Sudoku
  12. Unity3D跑马灯脚本
  13. 【bzoj3505】 Cqoi2014—数三角形
  14. Redis中的Stream的实现Radix Tree源码解读
  15. 在联想硬盘保护系统7.6版本下 机房系统网络同传实践操作 (二)
  16. CentOS8安装部署DzzOffice协同办公平台
  17. 网页里面的空格的代码怎么写
  18. 阿里程序员试用期被淘汰,原因竟是?
  19. 移动硬盘数据恢复需多少钱?关于这个不伤钱的方法
  20. 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步

热门文章

  1. [文摘20071008]全国软考相关-计算机技术与软件专业资格(水平)考试
  2. UVA10946 You want what filled?【DFS】
  3. CCF NOI1052 Self-Numbers
  4. POJ NOI MATH-7656 李白的酒
  5. 【证明】—— 斐波那契
  6. 新技能 get —— Python 断点续传下载文件
  7. 从多路搜索树到 B-树
  8. 标准模板库(STL)之无序容器列传
  9. 面向对象——类设计(七)
  10. Shell 操作(一)