代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PHP
】
一个抽奖函数(自定义中奖项数和概率)
作者:
刘远程
/ 发布于
2013/7/19
/
958
<? /* * 一个抽奖类,精确到万分之一 * 三个步骤: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); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8" /> </head> <body> <table> <thead>运行10000次,对比设置概率和中奖次数</thead> <tr><th>设置概率</th><th>中奖次数</th></tr> <tr><td><?php echo $rate[0]; ?>%</td><td><?php echo $rewards[1] ?></td></tr> <tr><td><?php echo $rate[1]; ?>%</td><td><?php echo $rewards[2] ?></td></tr> <tr><td><?php echo $rate[2]; ?>%</td><td><?php echo $rewards[3] ?></td></tr> <tr><td><?php echo $rate[3]; ?>%</td><td><?php echo $rewards[4] ?></td></tr> <tr><td><?php echo $rate[4]; ?>%</td><td><?php echo $rewards[5] ?></td></tr> <tr><td><?php echo $rate[5]; ?>%</td><td><?php echo $rewards[6] ?></td></tr> <tr><td><?php echo 'miss'; ?></td><td><?php echo $rewards[7] ?></td></tr> </table> </body> </html>
试试其它关键字
抽奖函数
同语言下
.
用net匹配并替换iOS标准的emoji表情符号
.
处理带Emoji表情的的字符串
.
获取微信昵称时 过滤特殊字符
.
通过判断上传文件的头字符来判断文件的类型
.
模拟百度URL加密解密算法
.
以太坊检查地址是否合法
.
实现crontab解析类
.
获取每个月的开始和结束时间
.
图片上传工具类
.
APP手机应用信息采集
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
刘远程
贡献的其它代码
(
8
)
.
简单实现淘宝API调用
.
实体对象拷贝
.
生成任意长度字符串的类(自由定制)
.
获取android手机安装的应用
.
实现回车提交表单
.
获取网页状态码
.
wifi批处理
.
一个抽奖函数(自定义中奖项数和概率)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3