개발 꿀팁/PHP

PHP 추첨의 새로운 방법, 멀티채널 추첨 지원

Jammie 2022. 9. 20. 16:45
반응형

추첨함에는 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);
}

 

반응형