반응형
추첨함에는 N개의 작은 공을 넣고 그 안에서 몇 개의 작은 공을 골라 당첨된 작은 공을 만든다.
추출 모드는 크게 나눌 수 있습니다
공을 뽑은 후 뽑은 공을 소각한다
작은 공을 뽑은 후, 뽑은 작은 공을 다시 넣어 계속 추첨에 참여합니다.
추첨함의 패턴을 알고 저희가 코드를 올리도록 하겠습니다
// 여기에서는 사용자 정의 캐시 메커니즘을 사용합니다. 만약 여러분이 프레임을 사용하면 해당 캐시 메커니즘으로 바꿀 수 있습니다(thinkphp는 cache( )로 바꿀 수 있습니다).
$this->name=';
$this->probability=0;
$this->prize=1;
/**
* @param $name / 수상 풀 이름
* @param $probability/확률
* @param $prize / 경품 라이브러리 당첨 난수 배열 필요
* @return $this
* 트로피 풀 생성/ 이미 존재하는 트로피 풀 재설정
*/
public function create_draw($probability = 1/1000, $name = 'draw', $prize = 1)
{
$this->name=$name;
$this->probability=$probability;
$this->prize=is_array($prize)? $prize: [$prize]);
Init::cache()->has($name) ?:Init::cache()->set($n)ame, [ ])
return $this
}
/**
* @paramint $type 1 꺼내기 2 꺼내기 다시 넣기
* @paramint $num 꺼낸 후 다시 놓는 횟수
* @return bool|int
* 추첨을 집행하다.
*/
public function query_draw($type = 1, $num = 0)
{
if ($this->probability == 0) return false;
$cache = Init::cache( );
// 보너스 풀 데이터 끌어오기
$draw_data = $cache->get($this->name);
// 총 수상자 수 획득
$total = 1 / $this->probability;
//랜덤추출
$key = rand(1, $total);
if (!in_array($key, $this->prize)) return false;
if ($type == 1 &!in_array($key, $draw_data)) return false;
if ($type == 2 & & $num > 0 & array_count_values($)draw_data][$key] >= $num) return false;
array_push($draw_data, $key)
$cache->set($this->name, $draw_data)
return $key;
}
/**
* 시상식 풀 데이터 가져오기
*/
public function get_draw_data($name = 'draw')
{
return Init::cache()->get($name);
}
/**
* @param string $draw_name
* @return bool
* 추첨 캐시 지우기
*/
public function undraw ($draw_name = 'draw')
{
return Init::cache()-> delete($draw_name);
}
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
phpredis의 추가 및 삭제 작업 라이브러리 (0) | 2022.09.21 |
---|---|
php가 url을 해석하여 url의 매개 변수를 얻고, url 매개 변수를 얻는 네 가지 방식 (1) | 2022.09.21 |
PHP 연쇄 조작은 call과 callstatic 마술 기법을 통해 실현되고 phpstorm은 주석을 통해 function을 추적한다 (0) | 2022.09.20 |
네이티브 PHP에서 네이티브 GD 라이브러리를 호출하여 포스터를 생성합니다 (0) | 2022.09.20 |
php AES 암호화 복호화 예제 (0) | 2022.09.20 |