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;
            
        }
    }
  • 相关阅读:
    获取最近6个月的年月(yyyyMM,不包括当月)
    checkbox与<c:forEach>在开发中遇到的问题记录
    MyBatis开发-->增删改
    MyBatis开发-->接口方式编程
    MyBatis开发-->入门
    android-async-http框架之与网络进行数据交互
    android-async-http框架之与服务器进行数据交互
    jQuery截取{}里的字符串及获取json里的值
    SSH整合之三:添加Hibernate环境且使之与Spring进行整合
    angular源码剖析之Provider系列--QProvider
  • 原文地址:https://www.cnblogs.com/walter371/p/4099625.html
Copyright © 2011-2022 走看看