按照设定的概率,得到随机抽奖的结果。<?php

/**

* 抽奖工具

*/

class lottery_tool {

protected static $awardsArr;

protected static $proField = 'probability';

protected static $proSum = 0;

protected static $checkAward = false;

const SUCCESS_CODE = 0;

const FAIL_CODE = -1;

//检查抽奖数据

protected static function checkAwards(){

if (!is_array(self::$awardsArr) || empty(self::$awardsArr)) {

return self::$checkAward = false;

}

self::$proSum = 0;

foreach (self::$awardsArr as $_key => $award) {

self::$proSum += $award[self::$proField];

}

if (empty(self::$proSum)) {

return self::$checkAward = false;

}

return self::$checkAward = true;

}

protected static function successRoll($rollKey){

return array('code' => self::SUCCESS_CODE, 'roll_key' => $rollKey, 'msg' => 'roll success');

}

protected static function failRoll($msg = 'roll fail'){

return array('code' => self::FAIL_CODE, 'msg' => $msg );

}

//抽奖

public static function roll () {

if (false == self::$checkAward) {

return self::failRoll('awards data is not the right format!');

}

$result = mt_rand(0, self::$proSum);

$proValue = 0;

foreach (self::$awardsArr as $_key => $value) {

$proValue += $value[self::$proField];

if ($result <= $proValue) {

return self::successRoll($_key);

}

}

return self::failRoll('wrong');

}

//改变概率字段名

public static function setProField($field = null) {

if (!empty($field)) {

self::$proField = $field;

}

}

//设置奖品

public static function setAwards($awards){

self::$awardsArr = $awards;

self::checkAwards();

}

}

forexample$awards = array(

'0' => array('pro' => 15, 'info' => '15%的可能性'),

'1' => array('pro' => 25, 'info' => '25%的可能性'),

'2' => array('pro' => 40, 'info' => '40%的可能性'),

'3' => array('pro' => 20, 'info' => '20%的可能性'),

);

lottery_tool::setProField('pro');

lottery_tool::setAwards($awards);

$result = array();

for ($i = 10000; $i --;) {

$result[] = lottery_tool::roll();

}

foreach ($result as $key => $value) {

$awards[$value['roll_key']]['num'] ++;

}

echo '

';

var_dump($awards);

//结果:

array

0 =>

array

'pro' => int 15

'info' => string '15%的可能性' (length=15)

'num' => int 1596

1 =>

array

'pro' => int 25

'info' => string '25%的可能性' (length=15)

'num' => int 2484

2 =>

array

'pro' => int 40

'info' => string '40%的可能性' (length=15)

'num' => int 3939

3 =>

array

'pro' => int 20

'info' => string '20%的可能性' (length=15)

'num' => int 1981

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

随机抽奖 php,php随机抽奖相关推荐

  1. Axure移动端app抽奖转盘+电商圆盘抽奖+商品抽奖+年会抽奖+抽奖动态+Axure通用抽奖转盘组件原型+九宫格方形随机抽奖原型组件+运营活动抽奖转盘

    Axure移动端app抽奖转盘+电商圆盘抽奖+商品抽奖+年会抽奖+抽奖动态+Axure通用抽奖转盘组件原型+九宫格方形随机抽奖原型组件+运营活动抽奖转盘 原型演示及下载地址:https://www.p ...

  2. 小程序抽奖效果demo滚筒抽奖3d动画抽奖(附代码以及随机中奖处理)

    前言: 最近公司要求做一个抽奖的页面,然后看到设计稿的一刻眉头一皱,这事没那么简单 最开始是用translateY但是效果太生硬了而且不方便二次抽奖或者多次抽奖找了半天决定用3d来做成一个滚轮这样的好 ...

  3. Web APIs,BOM树,声明dom对象,年会抽奖案例,随机图片,表单,用户注册倒计时,innerHTNL,classList的使用

    介绍 严格意义上讲,我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系,ECMAScript 简称 ES 它提供了一套语言标准规范,如变量.数据类型.表达式.语 ...

  4. mysql怎么设计抽奖表_Access设计抽奖系统

    一.系统组成及原理 抽奖系统主要由来宾登记.奖票管理.幸运抽奖.获奖查询四个基本模块构成,登记模块登记参加抽奖人员,奖票管理模块初始化参加抽奖人员名单,抽奖模块实现抽奖功能,获奖查询模块查询获奖结果. ...

  5. php抽奖页代码,php抽奖代码

    1.经典概率算法抽奖 $tmpItems = ['电脑'=>10, '相机'=>50, '100元现金'=>500]; $proSum = array_sum($tmpItems); ...

  6. 数字抽奖小程序_抽奖小程序凭什么成为流量的风口?怎么以最快的方式引流?...

    现在不管是实体店还是线上,最需要的就是客户流量,怎么才能最快速的引流呢? 推广到用户,并且让用户推广用户,更快的裂变. 现在市面上的抽奖小程序,轻松地做到了快速裂变发展用户的效果.成为流量风口. 抽奖 ...

  7. php9宫格抽奖程序_PHP实现抽奖功能实例代码

    在项目开发中经常会遇到花钱抽奖类型的需求.但是老板总是担心用户用小钱抽到大奖.这样会导致项目亏损.下边这段代码可以有效制止抽奖项目亏钱. 个人奖池: 语言:thinkphp redis mysql 表 ...

  8. Java编程随机发红包,红包随机算法Java实现

    需求:红包总金额随机后每份金额:最大值200, 最小值0.01:最大份数100: 工具:idea 参考:微信红包算法以及带上下限的红包算法 基于微信红包算法以及带上下限的红包算法优化,修改了部分极值时 ...

  9. java抽奖random,java抽奖概率,java抽奖

    java抽奖概率,java抽奖 Field Type Comment prize_name varchar(50) 奖品名称 total int(11) 数量 prizenum int(11) 奖品序 ...

  10. 一道多线程编程题的代码案例(两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,)

    题目: 分析以下需求,并用代码实现          有一个抽奖池,该抽奖池中存放了奖励的金额,         该抽奖池中的奖项为         {"魅族E","畅玩 ...

最新文章

  1. 单片机外包公司可以去吗?学好单片机能接私活吗?
  2. VTK:模型之Delaunay3DDemo
  3. php yii 控件分页,Yii2分页的使用及其扩展方法详解
  4. 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)
  5. KafkaConsumer分析
  6. PXE无人值守安装linux后无法启动图形
  7. 免费服装收银系统哪个好?
  8. html中嵌入flvplayer.swf播放器,播放视频
  9. pygame画圆练习赤橙黄绿青蓝紫
  10. “特困生”卷出睡眠市场,疯狂氪金能不能氪出“好故事”?
  11. Matlab神经网络(一)
  12. 名片 - 名片设计的比例
  13. 联通集团入选混改试点:电联合并已无希望
  14. html图标 白块,桌面图标变成白块了?不用怕,1分钟就搞定!
  15. 文件操作系列之三——(windows中的文件操作)
  16. TS 类的这10个知识点你掌握了吗?
  17. c语言专业教学,C语言在计算机专业中的教学.docx
  18. cf edu #132 Div.2
  19. php 获取当前时间相差12小时_php时间戳转换差8小时问题
  20. Goland调节字体大小(编辑区,terminal区,页面字体)

热门文章

  1. 迅为iTOP-IMX6ULL开发板Pinctrl和GPIO子系统实验-修改设备树文件
  2. varchar和varchar2的区别
  3. 高数(数一)知识点自我归纳(思维导图)
  4. 简单Web服务器程序设计与实现
  5. 16款最佳的 jQuery Time Picker 时间选择插件
  6. WOWZA的安装及(VOD+LIVE)简单配置和VLC RTP推流
  7. powerbi嵌入到HTML5,如何把Power BI嵌入到Web應用中
  8. ssm毕设项目自来水收费管理系统7yd5p(java+VUE+Mybatis+Maven+Mysql+sprnig)
  9. 智能水电表远程管理系统
  10. 如何写一份竞品分析报告——产品经理养成路