php 彩票类 lottery
2024-09-19 21:49:45
<?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; }
}
最新文章
- 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果
- Sql 常用时间转换
- iScroll-5 API 中文版
- angularjs可交互的directive
- 项目新的需求,网页的自适应交付/响应式交付 Responsive/Adaptive Delivery
- Echarts 合并版本
- Entity Framework 无法对没有主键的视图映射实体的解决办法
- Linux下安装MySQL5.6
- <;!DOCTYPE html>;的问题
- Android开发之异步具体解释(二)之AsyncTask
- Android 组件化/模块化之路——在展示层搭建MVP结构
- HDU - 1847 巴什博弈
- 【Python】 发邮件用 smtplib &; email
- DateGridView控件与mysql交互
- Docker 镜像使用
- OneAPM大讲堂 | Java 异常日志记录最佳实践
- Win10+Ubuntu1604双系统
- scrapy框架之持久化操作
- Jetty学习四:部署到Jetty
- Get方法和post方法有何不同?