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);
  • 相关阅读:
    第二百一十五节,jQuery EasyUI,DateBox(日期输入框)组件
    第二百一十四节,jQuery EasyUI,Calendar(日历)组件
    onethink 系统函数中 生成随机加密key
    本地开发 localhost链接数据库比127.0.0.1慢
    仿写thinkphp的I方法
    判断数组中有没有某个键 isset 和 array_key_exists 的效率比较
    jquery实时监听某个文本框的输入事件
    js数组去重
    thinkphp3.2.3 版本使用redis缓存的时候无法使用认证
    javascript中使用md5函数
  • 原文地址:https://www.cnblogs.com/phpfensi/p/4549649.html
Copyright © 2011-2022 走看看