TP5 实现转盘抽奖
1、实现
转盘分多种情况,常见的有 不同中奖几率的奖品 、限定数量的奖品 和 限定数量和中奖几率的奖品
1.1、不同中奖几率的奖品 的实现
1)计算出总概率的精度M
2)然后将所有的概率数组依次遍历
3)遍历中随机取出一个1~M的数字
4)如果随机数比当前这个数概率小,则表示命中。
5)反之则将总精度减去当前未命中的概率,表示剩余的总概率
总精度是为了生成随机数,而减去未命中的概率是为了排除出去,最后必定会命中
1.1.1、代码实现
- 传入的数组对应原有下标的一维数组,值为概率,整数/小数都可以
- 计算完后返回对应的下标,再可根据下标找到对应下标的中奖内容即可
测试的中奖几率的方法
/*** 测试中奖概率*/
public function test()
{//获取奖品列表$appAnglePrize =db('奖品配置表')->where('status', 1)->field('name as "奖项",rate')->order('weigh', 'DESC')->select();//获取对应的几率数组$rateArr = array_column($appAnglePrize, 'rate');foreach ($appAnglePrize as $k => $v) {$appAnglePrize[$k]['中奖次数'] = 0;$appAnglePrize[$k]['概率'] = strval($v['rate']) . '%';unset($appAnglePrize[$k]['rate']);}for ($i = 0; $i < 10000; $i++) {$result = $this->getRandPrize($rateArr);$appAnglePrize[$result]['中奖次数']++;}$this->success($appAnglePrize);
}
抽奖方法
/*** 返回转盘抽奖结果* @param array $proArr 概率数组(值为概率)* @return int|string 返回对应数组的下标*/
private function getRandPrize($proArr)
{$result = '';//概率数组的总概率精度$proSum = array_sum($proArr);//概率数组循环foreach ($proArr as $key => $proCur) {$randNum = mt_rand(1, $proSum);if ($randNum <= $proCur) {$result = $key;break;} else {$proSum -= $proCur;}}unset ($proArr);return $result;
}
1.1.2、测试
1)我们可以看出已经很接近对应的概率了。
2)我这里是跑一万次,我分别跑了好几次观察结果是可行的。
TP5 实现转盘抽奖相关推荐
- php ajax 概率 转盘,php+jquery实现转盘抽奖 概率可任意调
转盘抽奖,炫丽的一般是flash做的.不懂flash而又不需要那么炫丽,可以简单的通过jquery来实现.网上教程有很多,跟着做了一下,也贴出来吧.要实现转盘抽奖,有两个关键点,一是让转盘或指针转起来 ...
- 转盘抽奖php,使用PHP实现转盘抽奖算法案例解析
这次给大家带来使用PHP实现转盘抽奖算法案例解析,使用PHP实现转盘抽奖算法的注意事项有哪些,下面就是实战案例,一起来看一下. 流程: 1.拼装奖项数组 2.计算概率 3.返回中奖情况 代码如下: 中 ...
- 转盘在转动的同时ajax异步加载,用jQuery旋转插件jqueryrotate制作转盘抽奖.pdf
用用jQuery旋旋转转插插件件jqueryrotate制制作作转转盘盘抽抽奖奖 本文实例为大家分享了j Query旋转插件j queryrotate制作转盘抽奖的具体代码,供大家参考,具体内容 下 ...
- 转盘抽奖(主要:概率和JQ)
转盘抽奖 涉及的重点:JQ特效,概率 逻辑设计: 1.把前端页面设计好,转盘可以用table标签做,样式设计好 2.控制器把抽奖物查询出来,有序输出到前端页面设计好的转盘上 3.写JQ特效,原理就是轮 ...
- html转盘游戏,html5大转盘抽奖实例源码(基于vue.js)
[实例简介] [调试步骤] # 安装依赖 npm install # 开启本地服务器localhost:8088 npm run dev # 发布环境 npm run build #然后静待你的浏览器 ...
- python转盘抽奖概率_转盘指定概率抽奖
前段时间项目中开了一个转盘抽奖的活动,转盘抽奖是一个比较简单的算法,下面介绍两种实现 第一种实现 import random from typing import List def random_pi ...
- php 打乱数组顺序_PHP实现大转盘抽奖算法
php中文网最新课程 每日17点准时技术干货分享 本文通过具体的实例向大家介绍了PHP语言实现大转盘抽奖算法,希望对大家学习PHP抽奖有所帮助. 流程: 1.拼装奖项数组: 2.计算概率: 3.返回中 ...
- axure 内部框架内容下滑_Axure教程:转盘抽奖交互原型
本文跟大家分享,如何使用axure制作转盘抽奖交互原型,不带登录流程. 效果如下: 抽奖流程 一.主要内容 (1)主要元件:动态面板 (2)重点:旋转交互.随机函数.触发动作. (3)难点:通过停止位 ...
- Python使用Tkinter实现转盘抽奖器
Python使用Tkinter实现转盘抽奖器 我使用 Python 中的 Tkinter 模块实现了一个简单的滚动抽奖器,接下来继续写一个简单的转盘抽奖器. Tkinter 实现滚动抽奖器参考:htt ...
最新文章
- 题目1105:字符串的反码
- mmse评估量表_简易精神状态评价量表(mmse量表) 打印版.doc
- 【Cocosd2d实例教程二】地图编辑器Tiled的安装使用
- 用GDB调试程序(六)
- typeahead有什么作用_typeahead使用配置参数。
- STL源码剖析 list概述
- python列表appendtext_python-默认文本以及列表textvariable Entry小部...
- pandas numpy处理缺失值,none与nan比较
- php soap proxy host,php-PHP soap Could not connect to host
- 联想y7000p电池固件下载_联想拯救者Y7000P安装双系统win10+ubuntu18.04
- 硬件3--电压跟随器的作用
- 量化研究-恐慌和贪婪指数
- Android10.0CarAudioZone(一)
- 涅槃?高效报表开发人员的五件武器
- http常用请求头与响应头字段详解
- vue如何把html转换word,vue导出html、word和pdf的实现代码
- 美国加州伯克利大学计算机专业排名,美国加州大学伯克利分校计算机专业排名...
- java手机分辨率最高_主流手机分辨率 尺寸 操作系统
- 中国SaaS的机遇、战术和野心
- 中国少儿模特明星盛典 《荣耀王者》主题曲 即将全网发布