php中奖算法逻辑

Posted zhoupufelix的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

输出得到:

 

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

以上是关于php中奖算法逻辑的主要内容,如果未能解决你的问题,请参考以下文章

php中奖概率算法

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

微信开发PHP中奖概率经典算法实例

PHP实现大转盘抽奖算法实例

php 抽奖代码,100分奖励