> php教程 > PHP源码 > php随机抽奖

php随机抽奖

PHP中文网
풀어 주다: 2016-05-26 08:19:24
원래의
1484명이 탐색했습니다.

按照设定的概率,得到随机抽奖的结果。 

<?php 
/**
 * 抽奖工具
 */
class lottery_tool {

    protected static $awardsArr;
    protected static $proField = &#39;probability&#39;;
    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(&#39;code&#39; => self::SUCCESS_CODE, &#39;roll_key&#39; => $rollKey, &#39;msg&#39; => &#39;roll success&#39;);
    }

    protected static function failRoll($msg = &#39;roll fail&#39;){
    	return array(&#39;code&#39; => self::FAIL_CODE, &#39;msg&#39; => $msg );
    }

    //抽奖
    public static function roll () {

    	if (false == self::$checkAward) {
    		return self::failRoll(&#39;awards data is not the right format!&#39;);
    	}

    	$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(&#39;wrong&#39;);
    } 

    //改变概率字段名
    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(
    &#39;0&#39; => array(&#39;pro&#39; => 15, &#39;info&#39; => &#39;15%的可能性&#39;),
    &#39;1&#39; => array(&#39;pro&#39; => 25, &#39;info&#39; => &#39;25%的可能性&#39;),
    &#39;2&#39; => array(&#39;pro&#39; => 40, &#39;info&#39; => &#39;40%的可能性&#39;),
    &#39;3&#39; => array(&#39;pro&#39; => 20, &#39;info&#39; => &#39;20%的可能性&#39;),
    );

lottery_tool::setProField(&#39;pro&#39;);
lottery_tool::setAwards($awards);

$result = array();

for ($i = 10000; $i --;) {
    $result[] = lottery_tool::roll();
}

foreach ($result as $key => $value) {
    $awards[$value[&#39;roll_key&#39;]][&#39;num&#39;] ++;
}

echo &#39;<pre class="brush:php;toolbar:false">&#39;;
var_dump($awards);
//结果:
array
  0 => 
    array
      &#39;pro&#39; => int 15
      &#39;info&#39; => string &#39;15%的可能性&#39; (length=15)
      &#39;num&#39; => int 1596
  1 => 
    array
      &#39;pro&#39; => int 25
      &#39;info&#39; => string &#39;25%的可能性&#39; (length=15)
      &#39;num&#39; => int 2484
  2 => 
    array
      &#39;pro&#39; => int 40
      &#39;info&#39; => string &#39;40%的可能性&#39; (length=15)
      &#39;num&#39; => int 3939
  3 => 
    array
      &#39;pro&#39; => int 20
      &#39;info&#39; => string &#39;20%的可能性&#39; (length=15)
      &#39;num&#39; => int 1981
로그인 후 복사

                   

                   

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿