반복되지 않는 난수를 생성하는 몇 가지 방법을 아래에 작성하고 코드로 이동하세요.
echo '최대 무작위 수: '.RANDOM_MAX, ' ;결과 개수:'.COUNT, '
';
invoke_entry('rand1');
Invoke_entry('rand2');
Invoke_entry('rand3');
Invoke_entry('rand4');
함수 Invoke_entry($func_name) {
$time = 새로운 시간();
$time->time_start();
call_user_func($func_name);
echo $func_name.' 시간 소비: ', $time->time_spend();
echo '
';
}
함수 rand1() {
$숫자 = 범위(1, RANDOM_MAX);
shuffle($numbers); //배열을 무작위로 섞습니다
$result = array_slice($numbers, 1, COUNT);
$결과 반환;
}
함수 rand2() {
$결과 = 배열()
while(count($result)< COUNT) {
$result[] = mt_rand(1, RANDOM_MAX); //mt_rand()는 rand()보다 더 좋고 빠른 임의 함수입니다
$result = array_unique($result); //배열에서 중복된 요소를 삭제합니다
}
$결과 반환;
}
함수 rand3() {
$결과 = 배열()
while(count($result) < COUNT) {
$_tmp = mt_rand(1, RANDOM_MAX);
if(!in_array($_tmp, $result)) { //삽입
은 동일한 요소가 배열에 존재하지 않는 경우에만 허용됩니다.
$result[] = $_tmp;
}
}
$결과 반환;
}
함수 rand4() {
$결과 = 배열();
while (count($result) < COUNT) {
$result[] = mt_rand(1, RANDOM_MAX);
$result = array_flip(array_flip($result)); //array_flip은 배열의 키와 값을 교환합니다
}
$결과 반환;
}
수업 시간 {
비공개 $_start;
공개 함수 time_start() {
$this->_start = $this->microtime_float();
}
공개 함수 time_spend() {
$this->microtime_float() 반환 - $this->_start;
}
개인 함수 microtime_float() {
list($usec, $sec) = 폭발(" ", 마이크로타임());
return ((float)$usec (float)$sec);
}
}
?>
네 번째 방법인 뒤집기(flip) 방법에 대해 이야기해 보겠습니다. array_flip()을 사용하여 배열의 키와 값을 뒤집을 때, PHP 배열 기능을 사용하면 이때 반복되는 키를 덮어쓰게 됩니다. , 다시 뒤집는 것은 중복된 값을 제거하는 것과 같습니다.
위의 방법은 단순한 예일 뿐이며 일부 방법은 적용 범위가 제한되어 있습니다.
여러 가지 방법의 효율성을 살펴보면
배열이 클 경우 array_unique()를 사용하면 성능이 저하됩니다. 물론 shuffle()도 이로 인해 영향을 받습니다.