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 <[email protected]>

 * @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;

        

    }

}

 

你可能感兴趣的:(PHP)