채택완료

$rank = rand(1, 10); 함수 질문입니다.

2023-03-10 (금) 16:22:14 2,147

$rank = rand(1, 5);

이렇게 필드 5개에 하나씩 넣을려고 합니다.

필드1 = $rank

필드2 = $rank

필드3 = $rank

필드4 = $rank

필드5 = $rank

이렇게 했는데

값이

필드1 = 1

필드2 = 3

필드3 = 3

필드4 = 4

필드5 = 2

이런식으로 중복되는 값도 랜덤하게 들어갑니다.

이걸 랜덤하게 중복되는 숫자 없이 들어가게 하려면 어떤 함수 써야 되나요?

필드1 = 3

필드2 = 2

필드3 = 4

필드4 = 1

필드5 = 5

이런식으로요 ㅠㅠ
고수님들 확인부탁드립니다.

|

답변 3개

채택된 답변
+20 포인트
2023-03-10 (금) 23:10:10
Copy
<?php
$my_rand = [1, 2, 3, 4, 5];
shuffle($my_rand);
for ($i = 0; $i < count($my_rand); $i++) {
    $j = $i + 1;
    $br = $i === count($my_rand) - 1 ? "" : "<br>";
    echo "<input id='wr_".$j."' name='wr_".$j."' value='".$my_rand[$i]."'>".$br;
}
?>

뭐 비슷한 방식이지만 제게는 훨 편한 자바스크립트로 출력하면 아래처럼요.

Copy
<?php
$my_rand = [1, 2, 3, 4, 5];
shuffle($my_rand);
?>
<script>
myRand = <?php echo json_encode($my_rand); ?>;
for (i in myRand) {
    j = Number(i) + 1;
    brTag = j === myRand.length ? "" : "<br>"; 
    document.write("<input id='wr_" + j + "' name='wr_" + j + "' value='" + myRand[i] + "'>" + brTag);
} 
</script>
Copy
<?php

$rand = range(1,5);

shuffle($rand);

echo $rand[0]; // 첫번쨰

echo $rand[1]; // 두번쨰

echo $rand[2]; // 세번쨰

echo $rand[3]; // 네번쨰

echo $rand[4]; // 다섯번쨰

또는

Copy
$c = true; $i = 0; $rand = [];

while($c){

  $rnd = rand(1,5);

  if(array_search($rnd, $rand) !== false){

  }else {

    $rand[] = $rnd;

    $i++;

  }

  if(count($rand) == 5) $c = false;

}

 

echo $rand[0]; // 첫번쨰

echo $rand[1]; // 두번쨰

echo $rand[2]; // 세번쨰

echo $rand[3]; // 네번쨰

echo $rand[4]; // 다섯번쨰
2023-03-10 (금) 16:39:23

배열에 순서대로 넣고 정렬을 랜덤하게 하는것도 방법입니다

https://pblab.tistory.com/24

답변을 작성하려면 로그인이 필요합니다.