php中奖算法逻辑

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

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

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

 1 <?php
 2 //中奖奖品
 3 $prize_arr = array(
 4
 5     0=>array( ‘id‘=>1,‘prize‘=>‘现金500W‘,‘v‘=>1 ), //概率为1/200
 6     1=>array( ‘id‘=>2,‘prize‘=>‘iphone7‘,‘v‘=>5 ),
 7     2=>array( ‘id‘=>3,‘prize‘=>‘耐克跑鞋‘,‘v‘=>10 ),
 8     3=>array( ‘id‘=>4,‘prize‘=>‘魔声耳机‘,‘v‘=>24 ),
 9     4=>array( ‘id‘=>5,‘prize‘=>‘蓝牙音响‘,‘v‘=>60 ),
10     5=>array( ‘id‘=>6,‘prize‘=>‘现金1元‘,‘v‘=>100 )
11
12     );
13
14
15 /*
16  * 对数组进行处理
17  */
18
19 foreach( $prize_arr as $k => $v ){
20     //使用新数组item
21     $item[$v[‘id‘]] = $v[‘v‘];
22 }
23
24 /*
25  array(
26         1 => 1,
27         2 => 5,
28         3 => 10,
29         4 => 24,
30         5 => 60,
31         6 => 100
32      );
33  */
34
35 function get_rand($item){
36
37     $num = array_sum($item);//计算出分母200
38
39     foreach( $item as $k => $v ){
40
41       $rand = mt_rand(1, $num);//概率区间(整数) 包括1和200
42       /*
43        *这个算法很666
44        */
45       if( $rand <= $v ){
46           //循环遍历,当下标$k = 1的时候,只有$rand = 1 才能中奖
47           $result = $k;
48           echo $rand.‘--‘.$v;
49           break;
50       }else{
51           //当下标$k=6的时候,如果$rand>100 必须$rand < = 100 才能中奖 ,那么前面5次循环之后$rand的概率区间= 200-1-5-10-24-60 (1,100) 必中1块钱
52           $num-=$v;
53           echo ‘*‘.$rand.‘*‘."&ensp;"."&ensp;"."&ensp;";
54       }
55     }
56
57     return $result;
58 }
59
60 $res = get_rand($item);
61 $prize = $prize_arr[$res-1][‘prize‘];
62 echo $prize;

输出得到:

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

时间: 2024-10-06 14:35:57

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

【斗地主技巧】斗地主算法逻辑中的天之道&lt;转&gt;

******************************************************************** 作者比较喜欢玩斗地主,所以经常搜集一些网友斗地主的心得,下面这一篇,我感觉写得不错,特转载,与网友分享.原文链接 棋牌游戏推荐:JJ比赛 我比较喜欢在这上面玩,可以赢话费,而且积累的金币其实是可以兑换成人民币的,网上有人回收. *******************************************************************

腾讯算法逻辑题

前几天小生去了一趟腾讯,接受前端大大的虐待. 整个过程充斥着各种血与泪,特别是他们的算法逻辑题,让我甚是上心.遂mark下,以求甚解... 经过一番思考以及和小伙伴们的共同探索,总算代码的运行结果是符合题目要求了,不过也不确定是否是最佳答案... 且不管了,如果知道有更好的答案再更新便是.. 有人也许会说,骚年,你这样把题目发出来真的好吗?这样不担心是个人都有种去企鹅面前装13吗? 那么我可以很负责任的说,这几道题只是餐前小菜.真正的风浪在后头,假如谁天真的以为有了这几道题就稳了,小心被人当猴看

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

判断两个变量是否相等在任何编程语言中都是非常重要的功能. JavaScript 提供了 == 和 === 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍又一遍的告知: === 要求变量的类型和值均相等,才能返回true. 使用 === 来避免因JavaScript 类型转换带来的问题. 这样增加了 JavaScript 语法的灵活性但是也带来很多头疼的问题: 使用 ==/!=是 ===/!== 来判断两个变量是否相等? 为什么,JS 编码推荐使用

怎样的中奖算法能让人信服(转)

话说写一个抽奖程序还不容易,不就是生成一个随机数吗,哪需什么算法之类的. 从技术上说,这确实不难.事实上,你怎么写都可以,因为程序只运行在特定的设备上,外人根本无法了解其中的细节. 那么问题就来了,如何才能让大家相信你没有作弊? 你会说,我可以把程序开源,抽奖前大家监督运行.不过这样就一定可信了吗? 就算程序没问题,也不代表系统就是可靠的.或许你早已偷偷开了外挂,这样无论程序有多公正,结果仍躲不出魔掌. 那就退一步吧,每次开奖前重装一次系统. 不过,假设所有的软件都可信,但最终仍需通过硬件来执行

关于手机定位轨迹的算法逻辑

本逻辑纯属个人意淫,仅供参考,望大家不吝赐教. 一.1.0 直接用GPS定位去获取坐标 二.2.0 采用GPS定位,在可用卫星大于3的情况下,每2秒采取1个点,连续才10个点,并取这10个点两点之间最小的两个点,其中一个点作为中心点:并加上计步器功能,如果10个点中有超过3个点的步数为0则重新取点. 三.3.0 为了满足室内定位,需要加入百度或其他的基于基站的定位,则在2.0的基础上:如果可用卫星数小于3,则用百度或其他的基于基站的定位,需要采取以每秒取2个点的速度取20个点,对着20个点进行取

【机器学习笔记四】分类算法 - 逻辑回归

参考资料 [1]    Spark MLlib 机器学习实践 [2]    统计学习方法 1.Logistic分布 设X是连续随机变量,X服从Logistic分布是指X具有下列分布函数和密度函数 ,.其中u为位置参数,γ为形状参数.如下图: 分布函数以(u,1/2)为中心对称,满足:,其中形状参数γ越小,中心部分增加越快. 2.Logistic回归模型 二项logistic回归模型是一种分类模型,由条件概率P(Y|X)表示,这里随机变量X取实数,而Y取0或者1.定义: 和 Logistic回归比

机器学习算法 --- 逻辑回归及梯度下降

一.逻辑回归简介 logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域. logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处. 其公式如下: 其图像如下: 我们通过观察上面的图像可以发现,逻辑回归的值域为(0, 1),当输入为0时,其输出为0.5:当输入小于0,并且越来越小时,其输出越来越接近于0:相反的,当其输入大于0,并且越来越大时,其输出越来

机器学习-分类算法-逻辑回归

# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import matplotlib.pyplot as plt import numpy as np from sklearn.model_selection import train_test_split from sklearn import datasets, linear_model

(7) 逻辑回归算法

逻辑回归算法原理推导 逻辑回归,虽然叫回归,但还是一个分类算法  逻辑回归求解 原文地址:https://www.cnblogs.com/traditional/p/9385259.html