PHP shuffle을 이용한 중복 없이 배열 불러오기 - 랜덤 배열 가져오는 방법
페이지 정보
조회 731회 작성일 22-08-21 18:42
본문
랜덤 배열 가져오기
중복 없이 배열 불러오는 방법
랜덤으로 숫자를 가져와야 하는데, 중복이 되지 않게 불러오는 방법을 설명한다.
이것은 shuffle을 이용한 것이며, 배열은 숫자들을 넣어서 설명한다.
shuffle을 이용한 중복 없이 배열 불러오기 - 랜덤 배열 가져오는 방법
shuffle 함수 사용 방법
기본적인 랜덤 출력 함수에는 ran( )가 있다. 이것은 마구 뽑아내는 것에는 매우 편하다.
그런데 중복인지 걸러내는 것에는 불편하다.
그래서 이럴 때는 shuffle( ) 함수를 사용한다. shuffle는 배열을 가져올 때 편한 점도 있다.
shuffle( ) 함수의 구조는 아래와 같다.
[code]
<?php
배열 코드;
shuffle( );
?>
[/code]
그런데 배열을 이용하려면 배열 코드를 미리 만든 후에 shuffle 함수로 랜덤 불러오기를 해야 한다. 배열 코드를 만드는 방법은 아래처럼 하면 된다.
- 숫자인 경우 : $numbers = range(시작번호, 끝번호);
- 문자인 경우 : $arr = ["첫문자", "둘째문자", "세째문자", "네째문자"];
자, 이제 이것들을 가지고 아래에서 응용과정에 들어가 보자.
중복 없이 랜덤 배열 가져오는 예제
이번에는 실제로 배열을 넣어서 중복 없는 랜덤 부르기를 하는 방법을 설명한다. 예제는 아래와 같다.
숫자 중복 없이 랜덤으로 불러오기
[code]
<?php
$numbers = range(1, 5);
shuffle($numbers);
foreach($numbers as $number) echo "$number ";
?>
[/code]
문자 중복 없이 랜덤 불러오기
[code]
<?php
$arr = ["사과", "귤", "포도"];
shuffle($arr);
foreach($arr as $ele) echo "$ele ";
?>
[/code]
"$number "와 "$ele "에서 마지막에 한 칸 공백을 둬서 띄어쓰기를 할 수도 있다.
랜덤 불러올 때 중복없는 예제
위에서 익힌 중복 방지 랜덤 부르기의 예제를 실제로 이용해 보겠다.
총 개수를 정해 놓고, 그 중에서 원하는 수까지만 가져와서 자동으로 멈추는 코드다.
[code]
<?php
$total_n = 총개수; // ㄱ
$numbers = range(0,$total_n-1); // ㄴ
shuffle($numbers); // ㄷ
for ($i=0;$i<$row_n;$i++) { // ㄹ
if($i>원하는개수) break; // ㅁ
$use_numbers=$numbers[$i]; // ㅂ
echo $use_numbers; // ㅅ
} // ㅇ
?>
[/code]
- ㄱ : 불러올 대상의 총 개수를 정해 놓는 것이다. 예를 들어 총 10개면 $total_n = 10
- ㄴ : $numbers에 숫자를 넣는다. 0부터 시작하는데, $total_n-1라고 한 것은 1~10의 범위가 아니라 0~9의 범위가 되기 때문이다.
- ㄷ : 받은 숫자를 마구 섞는다.
- ㄹ : 이제 반복할 차례다. 0부터 시작해서 하나씩 숫자를 늘리며 순서를 정한다.
- ㅁ : 원하는 개수를 넘게 되면 중지한다. 예를 들어 7개까지만이면 $i>7
- ㅂ : 위에서 중지되기 전까지의 개수를 $use_numbers에 넣는다.
- ㅅ : 받은 개수대로 표시한다.
만약, 자동으로 정렬되길 바란다면, 위의 ㅅ 부분을 아래처럼 하면 된다.
점을 하나 찍은 후에 따옴표로 추가하면 되는 것이다.
- echo $use_numbers." "; 한 칸을 띄워서 표시한다.
- echo $use_numbers."\n"; 엔터 줄 바꿈을 한 후 표시한다.
- echo $use_numbers."\t"; 탭으로 일정 간격을 옆으로 가서 표시한다.
아래에는 게시판의 DB에서 중복 없이 랜덤으로 불러오는 코드도 있으니 참고해 보길 바란다.
게시판 랜덤 가져오기 - 스킨에서 게시물 랜덤으로 뿌려주기 (shuffle($list))