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

php随机抽奖实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-15 15:31:14 浏览: 评论:0 

这篇文章主要介绍了php随机抽奖实现方法,实例分析了php抽奖类lottery_tool及其具体使用技巧,需要的朋友可以参考下

本文实例讲述了php随机抽奖用法,分享给大家供大家参考,具体分析如下:

1. 按照设定的概率,得到随机抽奖的结果,代码如下:

  1. <?php 
  2. /** 
  3.  * 抽奖工具 
  4.  */ 
  5. class lottery_tool { 
  6.     protected static $awardsArr
  7.     protected static $proField = 'probability'
  8.     protected static $proSum = 0; 
  9.     protected static $checkAward = false; 
  10.     const SUCCESS_CODE = 0; 
  11.     const FAIL_CODE = -1; 
  12.     //检查抽奖数据 
  13.     protected static function checkAwards(){ 
  14.         if (!is_array(self::$awardsArr) || emptyempty(self::$awardsArr)) { 
  15.             return self::$checkAward = false; 
  16.         } 
  17.         self::$proSum = 0; 
  18.         foreach (self::$awardsArr as $_key => $award) { 
  19.             self::$proSum += $award[self::$proField]; 
  20.         } 
  21.         if (emptyempty(self::$proSum)) { 
  22.             return self::$checkAward = false; 
  23.         } 
  24.         return self::$checkAward = true; 
  25.     } 
  26.     protected static function successRoll($rollKey){ 
  27.         return array('code' => self::SUCCESS_CODE, 'roll_key' => $rollKey'msg' => 'roll success'); 
  28.     } 
  29.     protected static function failRoll($msg = 'roll fail'){ 
  30.         return array('code' => self::FAIL_CODE, 'msg' => $msg ); 
  31.     } 
  32.     //抽奖 
  33.     public static function roll () { 
  34.         if (false == self::$checkAward) { 
  35.             return self::failRoll('awards data is not the right format!'); 
  36.         } 
  37.         $result = mt_rand(0, self::$proSum); 
  38.         $proValue = 0; 
  39.         foreach (self::$awardsArr as $_key => $value) { 
  40.             $proValue += $value[self::$proField]; 
  41.             if ($result <= $proValue) { 
  42.                 return self::successRoll($_key); 
  43.             } 
  44.         } 
  45.         return self::failRoll('wrong'); 
  46.     } 
  47.     //改变概率字段名 
  48.     public static function setProField($field = null) { 
  49.         if (!emptyempty($field)) { 
  50.             self::$proField = $field
  51.         } 
  52.     } 
  53.     //设置奖品 
  54.     public static function setAwards($awards){ 
  55.         self::$awardsArr = $awards
  56.         self::checkAwards(); 
  57.     } 

2. 示例代码:

  1. $awards = array
  2.     '0' => array('pro' => 15, 'info' => '15%的可能性'), 
  3.     '1' => array('pro' => 25, 'info' => '25%的可能性'), 
  4.     '2' => array('pro' => 40, 'info' => '40%的可能性'), 
  5.     '3' => array('pro' => 20, 'info' => '20%的可能性'), 
  6.     ); 
  7. lottery_tool::setProField('pro'); 
  8. lottery_tool::setAwards($awards); 
  9. $result = array(); 
  10. for ($i = 10000; $i --;) { 
  11.     $result[] = lottery_tool::roll(); 
  12. foreach ($result as $key => $value) { 
  13.     $awards[$value['roll_key']]['num'] ++; 
  14. echo '<pre>'
  15. var_dump($awards); 

运行结果如下:

  1. array 
  2.   0 => 
  3.     array 
  4.       'pro' => int 15 
  5.       'info' => string '15%的可能性' (length=15) 
  6.       'num' => int 1596 
  7.   1 => 
  8.     array 
  9.       'pro' => int 25 
  10.       'info' => string '25%的可能性' (length=15) 
  11.       'num' => int 2484 
  12.   2 => 
  13.     array 
  14.       'pro' => int 40 
  15.       'info' => string '40%的可能性' (length=15) 
  16.       'num' => int 3939 
  17.   3 => 
  18.     array 
  19.       'pro' => int 20 
  20.       'info' => string '20%的可能性' (length=15) 
  21.       'num' => int 1981

Tags: php随机抽奖

分享到: