zoukankan      html  css  js  c++  java
  • php随机抽奖实例分析

    <?php 
    header('Content-type:text/html;charset=utf-8');
    /**
    
     * 抽奖工具
    
     */
    
    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();
        }
    }
    
    $awards = array(
            '0' => array('pro' => 1, 'info' => '1%的可能性' , 'num' =>0),
            '1' => array('pro' => 25, 'info' => '25%的可能性' , 'num' =>0),
            '2' => array('pro' => 40, 'info' => '40%的可能性' , 'num' =>0),
            '3' => array('pro' => 34, 'info' => '34%的可能性' , 'num' =>0),
        );
     //改变概率字段名
    lottery_tool::setProField('pro');
    //设置奖品
    lottery_tool::setAwards($awards);
    $result = array();
    
    for ($i = 100; $i --;) {
         //抽奖
        $result[] = lottery_tool::roll();
    }
    
    foreach ($result as $key => $value) {
        $awards[$value['roll_key']]['num'] ++;
    }
    
    echo '<pre>';
    var_dump($awards);
  • 相关阅读:
    Docker学习总结(四)--应用部署
    strcat的由来
    ubuntu man不到pthread_mutex_XX
    string::front
    string::find_last_of
    string::find_last_not_of
    string::find_first_of
    string::find_first_not_of
    string::erase
    string::empty
  • 原文地址:https://www.cnblogs.com/phpfensi/p/4549649.html
Copyright © 2011-2022 走看看