rand 함수 관련 해서 궁금... 정보
그누보드 rand 함수 관련 해서 궁금...본문
php에서 rand 함수를 사용해서 값을 얻을려고 합니다.
예를 들어 4가지의 문서를 랜덤으로 보여 주고 싶을때
1-4의 숫자를 랜덤으로 해도 같은 비율로 보여 줄수 있는 방법이 궁금합니다.
제가 하려고 하는것은 1-100의 숫자를 랜덤 함수를 사용하여
1~30 까지는 A
31~40 까지는 B
41~100 까지는 C
이런식으로 한다면 실제로는 그렇지 않지만..
A가 30% B가 10% C가 60%로 출력이 되는 방법이 없냐 해서요..
물론 정확하게 그수치가 나와야 되는건 아니지만
얼추 비슷하게만 나와도 도움이 많이 될것 같은데요..
주저리 주저리 말이 많았지만..
제가 생각하고 있는 소스의 일부 입니다.
<?
$abcde = "12345";
$abc[1] = "A";
$abc[2] = "B";
$abc[3] = "C";
$abc[4] = "D";
$abc[5] = "E";
$odds = array (30,25,20,20,5);
$code = sizeof($odds);
for($i=1 ; $i <= $code ; $i++){
$odds_n[$i] = $odds_n[$i-1] + $odds[$i-1];
}
srand ((double) microtime() * 1000000);
$num=rand(1,$odds_n[$code]);
for ($i=1; $i <= $code; $i++) {
if ($num > $odds_n[$i-1] && $num <= $odds_n[$i]){
if($abc[$i]){
$abcde = $abc[$i];
}
}
}
echo $abcde;
?>
디비를 안써서 그냥 하자니 상당히 머리가 아프군요..
디빌를 쓰면 max 값을주고 하나씩 빼가면 될 꺼 같기는 한데요...
휴~ 고수님들의 답변을 부탁드립니다 꾸벅 _(__)_
예를 들어 4가지의 문서를 랜덤으로 보여 주고 싶을때
1-4의 숫자를 랜덤으로 해도 같은 비율로 보여 줄수 있는 방법이 궁금합니다.
제가 하려고 하는것은 1-100의 숫자를 랜덤 함수를 사용하여
1~30 까지는 A
31~40 까지는 B
41~100 까지는 C
이런식으로 한다면 실제로는 그렇지 않지만..
A가 30% B가 10% C가 60%로 출력이 되는 방법이 없냐 해서요..
물론 정확하게 그수치가 나와야 되는건 아니지만
얼추 비슷하게만 나와도 도움이 많이 될것 같은데요..
주저리 주저리 말이 많았지만..
제가 생각하고 있는 소스의 일부 입니다.
<?
$abcde = "12345";
$abc[1] = "A";
$abc[2] = "B";
$abc[3] = "C";
$abc[4] = "D";
$abc[5] = "E";
$odds = array (30,25,20,20,5);
$code = sizeof($odds);
for($i=1 ; $i <= $code ; $i++){
$odds_n[$i] = $odds_n[$i-1] + $odds[$i-1];
}
srand ((double) microtime() * 1000000);
$num=rand(1,$odds_n[$code]);
for ($i=1; $i <= $code; $i++) {
if ($num > $odds_n[$i-1] && $num <= $odds_n[$i]){
if($abc[$i]){
$abcde = $abc[$i];
}
}
}
echo $abcde;
?>
디비를 안써서 그냥 하자니 상당히 머리가 아프군요..
디빌를 쓰면 max 값을주고 하나씩 빼가면 될 꺼 같기는 한데요...
휴~ 고수님들의 답변을 부탁드립니다 꾸벅 _(__)_
댓글 전체
이러면 어떨가요
이 배열을 두고 (AAABCCCCCC)
난수로 뽑으면 A확률 30%, B확률 10%, C확률 60%가 되고
이 나온값을 가지고
A면 1-30사이 난수를 , B면 31-40사이 난수를, C면 41-100난수를 를 뽑게 처리하고
그걸 보여주면 되지 않을까요?
이 배열을 두고 (AAABCCCCCC)
난수로 뽑으면 A확률 30%, B확률 10%, C확률 60%가 되고
이 나온값을 가지고
A면 1-30사이 난수를 , B면 31-40사이 난수를, C면 41-100난수를 를 뽑게 처리하고
그걸 보여주면 되지 않을까요?