- 论坛徽章:
- 0
|
按照设定的概率,得到随机抽奖的结果。- <?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();
- }
- }
复制代码 forexample- $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
复制代码 |
|