PHP 는 지 정 된 범위 내의 N 개의 중복 되 지 않 는 무 작위 수 를 생 성 합 니 다.

사고방식:생 성 된 무 작위 수 를 수조 에 저장 하고 수조 에서 중 복 된 값 을 제거 하면 일정 수량의 중복 되 지 않 는 무 작위 수 를 생 성 할 수 있다.
PHP 사이트 개발 에서 때때로 우 리 는 지 정 된 범위 내 에서 일정 수량의 중복 되 지 않 는 임 의 수 를 생 성 해 야 합 니 다.구체 적 으로 이 생산 임 의 수의 함 수 를 어떻게 설계 합 니까?우 리 는 무 작위 로 발생 하 는 수 를 배열 에 저장 할 수 있 지만,저장 하 는 동시에 중복 되 는 값 을 제거 하면 일정 수량의 중복 되 지 않 는 무 작위 수 를 생 성 할 수 있다.물론 지 정 된 범위 안의 수 치 를 배열 에 저장 한 다음 에shuffle($array)이 배열 을 어 지 럽 힌 다음 에 그 중의 일정한 수량의 값 을 캡 처 할 수도 있다.그러나 뒤의 방법 은 지 정 된 난수 범위 가 너무 클 때 비교적 큰 배열 이 생 긴 다.
다음은 첫 번 째 방법의 코드 를 드 리 겠 습 니 다.두 번 째 방법 은 더욱 간단 합 니 다.여러분 이 시도 해 보 세 요.사실 차이 가 많 지 않 습 니 다.

<?php
/*
* array unique_rand( int $min, int $max, int $num )
*              ,             
*            
* $min   $max:         
* $num:       
*/
function unique_rand($min, $max, $num) {
  $count = 0;
  $return = array();
  while ($count < $num) {
    $return[] = mt_rand($min, $max);
    $return = array_flip(array_flip($return));
    $count = count($return);
  }
  //    ,          
  shuffle($return);
  return $return;
}

//  10 1 100          
$arr = unique_rand(1, 100, 10);
echo implode($arr, ",");
?>
프로그램 실행 은 다음 과 같 습 니 다:
48,5,19,36,63,72,82,77,46,16
몇 가지 설명 을 추가 합 니 다.
1.무 작위 수 를 생 성 할 때 우 리 는mt_rand() 함 수 를 사용 했다.이 함수 생 성 난수 의 평균 속 도 는 rand() 보다 몇 배 빠르다.
2.배열 의 중복 값 을 제거 할 때'반전 법'을 사 용 했 습 니 다.바로 array_flip() 으로 배열 의 key 와 value 를 두 번 교환 하 는 것 입 니 다.이 방법 은 배열 의 중복 치 를 제거 하 는 동시에 효율 도 사용array_unique() 보다 훨씬 빠르다.
3.배열 로 돌아 가기 전에 먼저 shuffle() 를 사용 하여 배열 에 새로운 키 이름 을 부여 하고 키 이름 이 0-n 연속 숫자 임 을 보증 합 니 다.이 절 차 를 진행 하지 않 으 면 중복 값 을 삭제 할 때 키 이름 이 연속 되 지 않 을 수 있 습 니 다.for 로 옮 겨 다 닐 때 문제 가 있 지만 foreach 를 사용 하거나 옮 겨 다 닐 필요 가 없 을 때 shuffle 이 필요 하지 않 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기