DB에서 rand를 사용하여 순서를 섞는 것에 대해서 전에 얘기 했었다. →
[MySQL]DB에서 데이터를 임의로 가져올때...
이번엔 PHP 스크립트에서 임의의 데이터를 뽑기 위해 사용할 수 있는 함수를 소개 한다.
보통 당첨자를 선정하기위해 많이 사용될 수 있을 것이다.
1. mt_rand(n, m)
대부분 언어에서 제공하는 임의의 숫자를 뽑기 위한 random함수이다. n과 m의 범위에서 하나의 숫자를 선정해 준다.
예를 보면 쉽게 이해할 수 있다.
<?php
//「3」이 나오면 당첨이라고 표시.
$var = mt_rand(1, 10);
if ($var == 3) {
echo "당첨!!!!".PHP_EOL;
}
echo "이번에 구한 값:".$var.PHP_EOL;
?>
주의할 점은 거의 비슷한 확률로 숫자를 선정해 준다는 것이다.
2. shuffle(array)
이번엔 여러개의 데이터 중에서 선택 수가 2이상인 경우에 사용할 수 있는 함수이다.
보통은 배열의 값을 임의의 순서로 섞기 위해서 사용되는 함수다.
예를 들어 보자. 10명의 응모자 중에서 임의로 2명을 뽑는 문제가 있다고 하자.
다양한 알고리즘이 나올 수 있겠지만, shuffle함수를 이용해서 간단히 구현해 보자.
<?php
//응모자 이름
$array_name = array("홍길동", "이상해", "무기력", "나이뻐", "잘나가", "맹바기", "강남권", "나한창", "비상해", "나호구");
//당첨자를 선정하는 값을 갖는 배열
$array_value = array(1, 1, 0, 0, 0, 0, 0, 0, 0, 0);
shuffle($array_value);
//응모자와 선정 값을 갖는 배열을 결합한다.
$array_result = array_combine($array_name, $array_value);
//배열을 결과를 출력해 보자.
print_r($array_result);
?>
실행 시켜보면 매번 1을 갖는 응모자가 변함을 알 수 있다. 아래는 결과 중의 하나.
Array
(
[홍길동] => 0
[이상해] => 0
[무기력] => 1
[나이뻐] => 0
[잘나가] => 0
[맹바기] => 0
[강남권] => 0
[나한창] => 1
[비상해] => 0
[나호구] => 0
)
php에도 숨어있는 함수들이 꽤 많이 있다. 종종 레퍼런스를 뒤지며 문제를 간단히 해결 할 수 있는 함수가 있나 기웃거리곤 한다. 어쨌든 또 좋은 걸 하나 찾아냈다.
예전엔 이벤트를 하면 맘가는대로 당첨자를 고르곤 했었는데(주고 싶은 사람을 고를 수 있는 권한이랄까...-.-;;), 앞으론 객관적(?)으로 맡겨도 될 듯하다. ^.^;
동생아, 잘 참고해서 사용해 봐라. ㅋㅋ