- 論壇徽章:
- 0
|
按照設(shè)定的概率,得到隨機(jī)抽獎(jiǎng)的結(jié)果。- <?php
- /**
- * 抽獎(jiǎng)工具
- */
- 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;
-
- //檢查抽獎(jiǎng)數(shù)據(jù)
- 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 );
- }
-
- //抽獎(jiǎng)
- 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;
- }
- }
-
- //設(shè)置獎(jiǎng)品
- public static function setAwards($awards){
- self::$awardsArr = $awards;
- self::checkAwards();
- }
- }
復(fù)制代碼 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);
- //結(jié)果:
- 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
復(fù)制代碼 |
|