zoukankan      html  css  js  c++  java
  • php *类 lottery

    <?php
    
     /*
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */
    
     /**
     * Lottery class
     *
     * @author      Rafal Strojek <strojek.rafal@gmail.com>
     * @copyright   2014 (c) Rafal Strojek
     * @version     0.1
     */
    
    class Lottery
    {
        /**
         * Default parameters
         */
        private $params = array();
        
        /**
         * Numbers to drawn
         */
        private $numbers = array();
        
        /**
         * Constructor
         *
         * @param   array  $params  User-defined parameters
         */
        public function __construct($params = array())
        {
            $this->params = array_merge($this->getDefaultParameters(),$params);
            $this->numbers = range($this->params['from'], $this->params['to'], 1);
            
            $this->seedRand();
        }
        
        /**
         * Gets default parameters
         *
         * @return  array  Default Parameters
         */
        public function getDefaultParameters()
        {
            return array(
                'from' => 1, 
                'to' => 49,
                'numbers' => 6,
                'seed' => (int) ((float) microtime() * 1000000),
                'pow' => pow(2,24),
            );
        }
        
        /**
         * Gets parameters
         *
         * @return  array  Lottery parameters
         */
        public function getParameters()
        {
            return $this->params;
        }
        
        public function getSeed()
        {
            return (int) $this->params['seed'];
        }
        
        private function setSeed($seed = null)
        {
            $this->params['seed'] = ($seed) ? $seed : $this->makeSeed();
    
            // Return instance to shortcut
            return $this;
        }
        
        private function seedRand()
        {
            mt_srand($this->getSeed());
        }
        
        private function makeSeed()
        {
            return (int) ((mt_rand() + ((float) microtime() * 1000000)) % $this->params['pow']);
        }
        
        public function createTicket()
        {
            $ticket = array();
            $array = $this->numbers;
            
            for($i = 0; $i < $this->params['numbers']; $i++)
            {
                $this->setSeed()->seedRand();
                $key = mt_rand(0, (count($array) - 1));
                
                $ticket[$i] = $array[$key];
                array_splice($array, $key, 1);
            }
            
            asort($ticket);
            
            return $ticket;
        }
        
        public function createTickets($count = null)
        {
            if($count <= 0)
            {
                return array();
            }
            
            $count = min(500, max(1, $count));
            $tickets = array();
            for($i = 0; $i < $count; $i++)
            {
                $tickets[$i] = $this->createTicket();
            }
            
            return $tickets;
            
        }
    }
  • 相关阅读:
    分布式监控系统开发【day38】:报警自动升级代码解析及测试(八)
    分布式监控系统开发【day38】:报警阈值程序逻辑解析(四)
    分布式监控系统开发【day38】:监控trigger表结构设计(一)
    ubuntu 14.04 gitlab 的搭建
    u-boot2011.09 u-boot.img 的流程跟踪
    am335x u-boot2011.09 SPL 流程跟踪
    ubuntu apt-get 安装指定版本软件
    am335x Lan8710a 双网口配置
    Linux 使用tty0 显示10分钟自动关闭功能
    am335x uboot, kernel 编译
  • 原文地址:https://www.cnblogs.com/walter371/p/4099625.html
Copyright © 2011-2022 走看看