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抽奖代码的更多相关文章

  1. js手机号批量滚动抽奖代码实现

    我们平时在看一些选秀节目或一些歌唱类比赛节目时经常会看到在现场的大屏幕上会有观众的手机号在滚动来选出谁是幸运观众或谁中了什么奖项,这些手机号都是现场观众或场外观众在给选手投票时产生的,当主持人一声开始 ...

  2. jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码

    需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...

  3. javascript 转盘抽奖代码和计数器代码

    要介绍了javascript圆盘抽奖程序实现原理和完整代码例子,需要的朋友可以参考下  看到网页上有不少大转盘抽奖的应用,心血来潮也想弄个.于是找了点资料自己研究...  效果预览: 一.模拟抽奖的实 ...

  4. jQueryRotate 转盘抽奖代码实现

    代码如下: 例子兼容IE6,7,8 以及高版本浏览器,如有bug请回复! 1.html结构 <!doctype html> <html lang="en"> ...

  5. html 抽奖代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. php实现概率性随机抽奖代码

    1.初始数据: 权重越大,抽取的几率越高 [奖品1, 权重 5], [ 奖品2, 权重6], [ 奖品3, 权重 7], [ 奖品4, 权重2] 2.处理步骤: 1)N = 5 + 6 + 7 + 2 ...

  7. php按照奖品百分比随机抽奖代码分析

    这个忘记从哪里copy过来了 /** * 概率算法 * @param array $probability * @return integer|string */ function get_rand( ...

  8. PHP抽奖代码。亲测可用

    $prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), '1' => ...

  9. HTML5 Canvas绘制转盘抽奖

    新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...

随机推荐

  1. 面向对象继承 (for in 原型链查找属性)

    window.onload=function(){ new Preson('liujian','男').show(); new Work('liujian','男','工人').show(); new ...

  2. 仿window系统自带的日期差计算器类

    public class MonthSubstract { /// <summary> /// 日期差之月份 /// </summary> public int Months ...

  3. maven log4g 用法

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...

  4. linux命令汇总

    GPU使用率 使用率查看,GPU-Util $ nvidia-smi 实时查看 $ watch [options] command 最常用的参数是 -n, 后面指定是每多少秒来执行一次命令. 监视显存 ...

  5. iBatis.net 循环iterate,没有foreach

    3.9.4. Iterate Element This tag will iterate over a collection and repeat the body content for each ...

  6. UML大战需求分析--阅读笔记01

    本次阅读的书籍是<UML大战需求分析>,看了前两章的内容:1 大话UML,2绞尽脑汁的需求分析.这两章内容关联不大,分开描述. 第一章:大话UML 本章主要概述UML是什么,有什么内容.U ...

  7. yum---Linux软件安装与管理

    查询: yum list #查询所有可用的软件包列表 yum search keywords #搜索服务器上所有和关键字相关的软件包 安装: yum -y install 包名 options: in ...

  8. NC凭证接口(Java发送流和处理返回结果)

    问题描述: 金融行业在系统模块分为财务和业务两个系统,我公司是负责业务模块系统,NC公司负责财务系统.但是财务有时候需要生成凭证,这时候就涉及业务模块了,我方就需要写NC凭证接口.这时候就需要三方交互 ...

  9. [转]PhpStorm 超强语言模板的支持

    最近遇到一些PhpStorm编程的问题: 在使用Zen Coding插件时,PHPStorm不像Notepad++那样随便使用.PHPStorm只有在编辑识别为HTML的文件时才可以使用Zend Co ...

  10. 【postman】postman

    谷歌插件网 http://chromecj.com/utilities/2014-09/181.html