最近公司有两个活动, 一个是砸蛋活动, 另一个是转盘活动。

后台这边需要做接口进行对接,当用户在前台点击进行抽奖的时候,发送AJAX请求给后台,后台进行业务处理包括记录用户中奖信息,然后返回json格式的数据给前台进行显示 其中最为核心的就是中奖的算法逻辑了。

在网上查看了一些算法之后发现下面这种算法效率比较高。

 <?php
//中奖奖品
$prize_arr = array( 0=>array( 'id'=>1,'prize'=>'现金500W','v'=>1 ), //概率为1/200
1=>array( 'id'=>2,'prize'=>'iphone7','v'=>5 ),
2=>array( 'id'=>3,'prize'=>'耐克跑鞋','v'=>10 ),
3=>array( 'id'=>4,'prize'=>'魔声耳机','v'=>24 ),
4=>array( 'id'=>5,'prize'=>'蓝牙音响','v'=>60 ),
5=>array( 'id'=>6,'prize'=>'现金1元','v'=>100 ) ); /*
* 对数组进行处理
*/ foreach( $prize_arr as $k => $v ){
//使用新数组item
$item[$v['id']] = $v['v'];
} /*
array(
1 => 1,
2 => 5,
3 => 10,
4 => 24,
5 => 60,
6 => 100
);
*/ function get_rand($item){ $num = array_sum($item);//计算出分母200 foreach( $item as $k => $v ){ $rand = mt_rand(1, $num);//概率区间(整数) 包括1和200
/*
*这个算法很666
*/
if( $rand <= $v ){
//循环遍历,当下标$k = 1的时候,只有$rand = 1 才能中奖
$result = $k;
echo $rand.'--'.$v;
break;
}else{
//当下标$k=6的时候,如果$rand>100 必须$rand < = 100 才能中奖 ,那么前面5次循环之后$rand的概率区间= 200-1-5-10-24-60 (1,100) 必中1块钱
$num-=$v;
echo '*'.$rand.'*'."&ensp;"."&ensp;"."&ensp;";
}
} return $result;
} $res = get_rand($item);
$prize = $prize_arr[$res-1]['prize'];
echo $prize;

输出得到:

循环遍历,不停获取随机数并缩小概率空间,如果中一等奖只经过一层循环,概率越大的,经过循环的次数就越多有点像高中的概率的题目, 如果不中五等奖,那么必中六等奖!

php中奖算法逻辑的更多相关文章

  1. Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑

    判断两个变量是否相等在任何编程语言中都是非常重要的功能. JavaScript 提供了 == 和 === 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍 ...

  2. 【斗地主技巧】斗地主算法逻辑中的天之道<转>

    ******************************************************************** 作者比较喜欢玩斗地主,所以经常搜集一些网友斗地主的心得,下面这 ...

  3. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

  4. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]

     转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...

  5. 广告系统中weak-and算法原理及编码验证

    wand(weak and)算法基本思路 一般搜索的query比较短,但如果query比较长,如是一段文本,需要搜索相似的文本,这时候一般就需要wand算法,该算法在广告系统中有比较成熟的应 该,主要 ...

  6. 什么是系统,什么是算法 -- lemon OA 系统学习总结

    一.对于模块划分的理解 对于一个大型(这里还只是一个中型系统)系统来说,代码的编写不是一日而就的,层次的明细也不是一眼就能看清楚的. 在这种情况下,需要想好,最好是由上而下地想好. 能够模块式地划分最 ...

  7. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

  8. 自然语言处理之Levenshtien Distance算法研究

    自然语言处理中,一个很重要的应用就是问答系统,这里面,涉及到问题和知识库里面的问题的匹配度,从而检索出问题的答案,这个是一个比较常见的应用算法. 编辑距离(Edit Distance),又称Leven ...

  9. 排序算法<No.3>【桶排序】

    算法,是永恒的技能,今天继续算法篇,将研究桶排序. 算法思想: 桶排序,其思想非常简单易懂,就是是将一个数据表分割成许多小数据集,每个数据集对应于一个新的集合(也就是所谓的桶bucket),然后每个b ...

随机推荐

  1. 判断iPhone的WiFi是否打开的两种方法 之是否连接上 WiFi

    iOS中用来查询当前连接的网络信息的API即CNCopyCurrentNetworkInfo 这个API位于SystemConfiguration.framework里面,使用时需要增加.h和包含库文 ...

  2. Java丨博客系统

    后台界面: 前台界面: 这是一个由我带着刚入门的几位实习生做的一个博客系统,希望给java入门的学习者一个例子,这个系统还需要完善,主体功能是实现了,还差一些细节,如果需要源码的话可以在下方给我留言! ...

  3. 将apache的prefork改成worker

    1. 检测apache正在使用哪个MPM? XXX@XXX-ThinkPad-Edge-E431:~$ apachectl -V | grep -i mpm Server MPM: prefork 2 ...

  4. [PHP] PHP1 与 CGI

    早期,一个web程序通过cgi方式提供数据处理,编写cgi程序可以用不同的语言. 这个过程是,我们生成一个服务端可执行程序,处理 web server 传过来的请求,(设置header头)然后返回数据 ...

  5. WP8.1开发中找程序下的Assets文件夹

    这俩天在开发另一个程序时,遇到一个小问题:如何调用程序下的Assets文件夹及其下的文件和文件夹: 在网上找了两天,基本上是关于如何调用手机中库的方法,没找到有关介绍如何调用查找 编译前添加图片或其它 ...

  6. Python脚本收集腾讯云CDN日志,并入ELK日志分析

    负责搭建公司日志分析,一直想把CDN日志也放入到日志分析,前些日志终于达成所愿,现在贴出具体做法: 1.收集日志 腾讯云CDN日志一般一小时刷新一次,也就是说当前只能下载一小时之前的日志数据,但据本人 ...

  7. 《深入理解java虚拟机-高效并发》读书笔记

    Java内存模型与线程 概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能,多任务运行是压榨手段,就如windows一样,我们使劲的压榨它运行多个任务,俱要high又要耍.并发则是另外一种更 ...

  8. linux网络编程1 最简单的socket编程

    下面是socket编程的服务器端 先看一个图,1 #include<stdio.h> #include<stdlib.h> #include<string.h> # ...

  9. Zookeeper与Kafka集群搭建

    一 :环境准备: 物理机window7 64位 vmware 3个虚拟机 centos6.8  IP为:192.168.17.[129 -131] JDK1.7安装配置 各虚拟机之间配置免密登录 安装 ...

  10. Bootstrap学习-环境安装

    1.<meta http-equiv="X-UA-Compatible" content="IE=edge"> 让IE运行最新的渲染模式. 2.&l ...