程序员人生 网站导航

一个简单php 抽奖小程序

栏目:php教程时间:2014-06-12 07:17:21

一个抽奖小程序,概论可控,也可某个奖品在前端显示,而程序中根本不可能获得,把所有的概率x10后相加起来,新数组中每项的值等于它前几个的和加上它本身,然后随即生成一个0到最大数之间的一个数,通过循环查看它属于那个区间,返回该区间的key,代码如下:

  1. $prize = array
  2.  1 => 3.5,  //3.5%机率 
  3.  2 => 2.5,  
  4.  3 => 6,  
  5.  4 => 2,  
  6.  5 => 42,  //42%机率 
  7.  6 => 36,  
  8.  7 => 2,  
  9.  8 => 4,  
  10.  9 => 2 
  11. ); 
  12. //最后确认相加等于100 
  13. $prizeList = array
  14.  1 => array('小仙子'),  
  15.  2 => array('5Q币'),  
  16.  3 => array('38888游戏币'),  
  17.  4 => array('88888游戏币'),  
  18.  5 => array('谢谢参与!'),  
  19.  6 => array('欢迎下次再来!'),  
  20.  7 => array('10Q币'),  
  21.  8 => array('888银元宝(绑定)'),  
  22.  9 => array('随机高级坐骑(绑定)'
  23. ); 
  24. //unset($prize[7]); 直接把10Q这个奖品去掉 
  25.   
  26. $times = 10; 
  27. $max = 0; 
  28. foreach ($prize as $k => $v
  29.  $max = $v * $times + $max
  30.  $row['v'] = $max
  31.  $row['k'] = $k
  32.  $prizeZone[] = $row
  33.   
  34. $max--; //临界值 
  35. $rand = mt_rand(0, $max); 
  36. $zone = 1; 
  37. foreach ($prizeZone as $k => $v
  38.  if ($rand >= $v['v']) 
  39.  { 
  40.   if ($rand >= $prizeZone[$k + 1]['v']) 
  41.   { 
  42.    continue
  43.   } 
  44.   else 
  45.   { 
  46.    $zone = $prizeZone[$k + 1]['k']; 
  47.    break
  48.   } 
  49.  } 
  50.  $zone = $v['k']; 
  51.  break
  52. print_r($prizeList[$zone][0]); 
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐