当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现大转盘抽奖算法(代码实例)

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-26 10:25:59 浏览: 评论:0 

本文通过具体的实例向大家介绍了PHP语言实现大转盘抽奖算法,希望对大家学习PHP抽奖有所帮助。

流程:

1.拼装奖项数组;

2.计算概率;

3.返回中奖情况。

代码如下:中奖概率 ' v ' 可以在后台设置,传到此方法中,注意传整数

  1. function get_gift(){   
  2.  
  3.         //拼装奖项数组 
  4.  
  5.         // 奖项id,奖品,概率 
  6.  
  7.         $prize_arr = array(    
  8.  
  9.           '0' => array('id'=>1,'prize'=>'平板电脑','v'=>0),    
  10.  
  11.           '1' => array('id'=>2,'prize'=>'数码相机','v'=>0),    
  12.  
  13.           '2' => array('id'=>3,'prize'=>'音箱设备','v'=>0),    
  14.  
  15.           '3' => array('id'=>4,'prize'=>'4G优盘','v'=>5),    
  16.  
  17.           '4' => array('id'=>5,'prize'=>'10Q币','v'=>0),    
  18.  
  19.           '5' => array('id'=>6,'prize'=>'空奖','v'=>5),    
  20.  
  21.         );    
  22.  
  23.  
  24.  
  25.         foreach ($prize_arr as $key => $val) {    
  26.  
  27.           $arr[$val['id']] = $val['v'];//概率数组           }     
  28.  
  29.         $rid = $this->get_rand($arr); //根据概率获取奖项id    
  30.  
  31.         $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项    
  32.  
  33.         unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项    
  34.  
  35.         shuffle($prize_arr); //打乱数组顺序    
  36.  
  37.         for($i=0;$i<count($prize_arr);$i++){    
  38.  
  39.           $pr[] = $prize_arr[$i]['prize'];  //未中奖项数组         }    
  40.  
  41.         $res['no'] = $pr
  42.  
  43.         // var_dump($res); 
  44.  
  45.  
  46.  
  47.         if($res['yes']!='空奖'){   
  48.  
  49.             $result['status']=1;   
  50.  
  51.             $result['name']=$res['yes'];   
  52.  
  53.         }else{   
  54.  
  55.             $result['status']=-1;   
  56.  
  57.             $result['msg']=$res['yes'];   
  58.  
  59.         }    
  60.  
  61.         //return $result;   
  62.  
  63.         var_dump($result); 
  64.  
  65.     }   
  66.  
  67.  
  68.  
  69.     //计算中奖概率 
  70.  
  71.     function get_rand($proArr) {    
  72.  
  73.       $result = '';    
  74.  
  75.  
  76.  
  77.       //概率数组的总概率精度    
  78.  
  79.       $proSum = array_sum($proArr);    
  80.  
  81.       // var_dump($proSum); 
  82.  
  83.  
  84.  
  85.       //概率数组循环    
  86.  
  87.       foreach ($proArr as $key => $proCur) {    
  88.  
  89.         $randNum = mt_rand(1, $proSum);  //返回随机整数 
  90.  
  91.          if ($randNum <= $proCur) {    
  92.  
  93.           $result = $key;    
  94.  
  95.           break;    
  96.  
  97.         } else {    
  98.  
  99.           $proSum -= $proCur;    
  100.  
  101.         }    
  102.  
  103.       }    
  104.  
  105.       unset ($proArr);    
  106.  
  107.       return $result;    
  108.  
  109.     }

Tags: PHP大转盘抽奖算法

分享到: