php抽奖代码
1.经典概率算法抽奖
$tmpItems = ['电脑'=>10, '相机'=>50, '100元现金'=>500];
$proSum = array_sum($tmpItems);
foreach ($tmpItems as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$resultId = $key;
break;
} else {
$proSum -= $proCur;
}
}
从count($tmpItems)总样本中随机一个数,循环的判断是否小于currentValue,小于便是中奖,大于就从总样本中扔掉currentValue ,继续循环产生随机数判断概率是否落入小于currentValue区间内。
封装为函数,支持概率为小数点 (小数点位数越多数据量越大)
function get_prize($prizeItems) {
$resultId = '';
$dec = explode('.', strval(min($prizeItems))); # 小数点拆分
$dec_len = isset($dec[1]) ? strlen($dec[1]) : ''; #小数点后长度
$radix = 1; # 乘积的基数
if ($dec_len) {
for ($i = 1; $i <= $dec_len; $i++) {
$radix*=10;
}
}
$tmpItems = [];
foreach ($prizeItems as $key => $value) {
$tmpItems[$key] = $value * $radix;
}
$proSum = array_sum($tmpItems);
foreach ($tmpItems as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$resultId = $key;
break;
} else {
$proSum -= $proCur;
}
}
return $resultId;
} /**
* 电脑 概率为0.02% 十万分之二
* 相机 概率为0.2% 万分之二
* 100元现金 概率为1.8% 百分之一点八
* 德芙巧克力 概率为40% 十分之四
* 谢谢参与 概率为57.98% 百分之五十七点九八
*/
$prizeItems = ['电脑' => 0.0002, '相机' => 0.002, '100元现金' => 0.018,'德芙巧克力'=>0.4,'谢谢参与'=>0.5798];
print_r(get_prize($prizeItems));
2.全概率样本抽奖
php抽奖代码的更多相关文章
- js手机号批量滚动抽奖代码实现
我们平时在看一些选秀节目或一些歌唱类比赛节目时经常会看到在现场的大屏幕上会有观众的手机号在滚动来选出谁是幸运观众或谁中了什么奖项,这些手机号都是现场观众或场外观众在给选手投票时产生的,当主持人一声开始 ...
- jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...
- javascript 转盘抽奖代码和计数器代码
要介绍了javascript圆盘抽奖程序实现原理和完整代码例子,需要的朋友可以参考下 看到网页上有不少大转盘抽奖的应用,心血来潮也想弄个.于是找了点资料自己研究... 效果预览: 一.模拟抽奖的实 ...
- jQueryRotate 转盘抽奖代码实现
代码如下: 例子兼容IE6,7,8 以及高版本浏览器,如有bug请回复! 1.html结构 <!doctype html> <html lang="en"> ...
- html 抽奖代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- php实现概率性随机抽奖代码
1.初始数据: 权重越大,抽取的几率越高 [奖品1, 权重 5], [ 奖品2, 权重6], [ 奖品3, 权重 7], [ 奖品4, 权重2] 2.处理步骤: 1)N = 5 + 6 + 7 + 2 ...
- php按照奖品百分比随机抽奖代码分析
这个忘记从哪里copy过来了 /** * 概率算法 * @param array $probability * @return integer|string */ function get_rand( ...
- PHP抽奖代码。亲测可用
$prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), '1' => ...
- HTML5 Canvas绘制转盘抽奖
新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...
随机推荐
- http://www.cnblogs.com/kissdodog/p/4159176.html
想要自己一个人完成app,那么后台接口也必须自己动动手.不用担心,其实很简单的,给自己信心!下面就以登录注册为例,做一个api接口 首先在mac上搭建PHP环境,下载 MAMP Pro for Mac ...
- RF 基本方法
1. Select From List id=sourceConn oracle_source 从下拉框选取值. 2. Select Radio button name value 选择单选框.也可 ...
- 如何访问wikipedia 的中文版
http://blog.csdn.net/double_wjl/article/details/52216036
- 【原创】贴个dirtycow(脏牛漏洞)不死机的exploit
dirtycow官网上几个获得rootshell的exp大都会导致机器死机,在原作者的基础上改进了一下,做个记录: /* * (un)comment correct payload first (x8 ...
- 命令查询网站是否开启CDN加速
1.使用ping命令 不一定准确 运行-CMD 直接输入ping 域名 C:\Users\6503>ping www.netnic.com.cn 正在 Ping u999.v.qingcdn ...
- vim vi Ubuntu
在vi编辑模式下按退格键不能删除内容,按方向键不能上下左右移动?如果是则:1. 在vi里非编辑模式下按冒号进入到末行命令模式,然后输入set nocompatible,回车,然后在进入vi编辑模式,看 ...
- python 2.7 学习笔记--day1--基础语句和语法
1. 用户交互 鉴于本小节十分的基础,变不多做赘述啦! 1.1 输出第一个程序:"Hello World !" 1.2 输出字符串,重点是去除字符串中的前后的空格,使用strip( ...
- 理解Angular中的$apply()以及$digest()
$apply()和$digest()在AngularJS中是两个核心概念,但是有时候它们又让人困惑.而为了了解AngularJS的工作方式,首先需要了解$apply()和$digest()是如何工作的 ...
- Android 学习资源收集
1.2015最流行的Android组件.工具.框架大全 地址 http://www.open-open.com/lib/view/open1436262653692.html
- 关于python装饰器
关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...