php随机抽奖实例分析 |
本文标签:php,随机,抽奖 本文实例讲述了php随机抽奖用法 。分享给大家供大家参考 。具体分析如下: 1. 按照设定的概率,得到随机抽奖的结果 。 复制代码 代码如下: <?php /** * 抽奖工具 */ class lottery_tool { protected static $awardsArr; protected static $proField = probability; protected static $proSum = 0; protected static $checkAward = false; const SUCCESS_CODE = 0; const FAIL_CODE = -1; //检查抽奖数据 protected static function checkAwards(){ if (!is_array(self::$awardsArr) || empty(self::$awardsArr)) { return self::$checkAward = false; } self::$proSum = 0; foreach (self::$awardsArr as $_key => $award) { self::$proSum += $award[self::$proField]; } if (empty(self::$proSum)) { return self::$checkAward = false; } return self::$checkAward = true; } protected static function successRoll($rollKey){ return array(code => self::SUCCESS_CODE, roll_key => $rollKey, msg => roll success); } protected static function failRoll($msg = roll fail){ return array(code => self::FAIL_CODE, msg => $msg ); } //抽奖 public static function roll () { if (false == self::$checkAward) { return self::failRoll(awards data is not the right format!); } $result = mt_rand(0, self::$proSum); $proValue = 0; foreach (self::$awardsArr as $_key => $value) { $proValue += $value[self::$proField]; if ($result <= $proValue) { return self::successRoll($_key); } } return self::failRoll(wrong); } //改变概率字段名 public static function setProField($field = null) { if (!empty($field)) { self::$proField = $field; } } //设置奖品 public static function setAwards($awards){ self::$awardsArr = $awards; self::checkAwards(); } } 2. 示例代码: 复制代码 代码如下: $awards = array(
0 => array(pro => 15, info => 15%的可能性), 1 => array(pro => 25, info => 25%的可能性), 2 => array(pro => 40, info => 40%的可能性), 3 => array(pro => 20, info => 20%的可能性), ); lottery_tool::setProField(pro); lottery_tool::setAwards($awards); $result = array(); for ($i = 10000; $i --;) { $result[] = lottery_tool::roll(); } foreach ($result as $key => $value) { $awards[$value[roll_key]][num] ++; } echo <pre>; var_dump($awards); 运行结果如下: 复制代码 代码如下: array
0 => array pro => int 15 info => string 15%的可能性 (length=15) num => int 1596 1 => array pro => int 25 info => string 25%的可能性 (length=15) num => int 2484 2 => array pro => int 40 info => string 40%的可能性 (length=15) num => int 3939 3 => array pro => int 20 info => string 20%的可能性 (length=15) num => int 1981 希望本文所述对大家的php程序设计有所帮助 。 |