반복되지 않는 난수를 생성하는 여러 가지 방법을 적어보겠습니다. 바로 코드로 들어가겠습니다
코드는 다음과 같습니다.
<?phpdefine('RANDOM_MAX', 100);define('COUNT', 10); echo 'max random num: '.RANDOM_MAX, ' ;result count:'.COUNT, '<br/>'; invoke_entry('rand1');invoke_entry('rand2');invoke_entry('rand3');invoke_entry('rand4'); function invoke_entry($func_name) { $time = new time(); $time->time_start(); call_user_func($func_name); echo $func_name.' time spend: ', $time->time_spend(); echo '<br/>';}function rand1() { $numbers = range (1, RANDOM_MAX); shuffle($numbers); //随机打乱数组 $result = array_slice($numbers, 1, COUNT); return $result;}function rand2() { $result = array(); while(count($result)< COUNT) { $result[] = mt_rand(1, RANDOM_MAX); //mt_rand()是比rand()更好更快的随机函数 $result = array_unique($result); //删除数组中重复的元素 } return $result;}function rand3() { $result = array(); while(count($result) < COUNT) { $_tmp = mt_rand(1, RANDOM_MAX); if(!in_array($_tmp, $result)) { //当数组中不存在相同的元素时,才允许插入 $result[] = $_tmp; } } return $result;}function rand4() { $result = array(); while (count($result) < COUNT) { $result[] = mt_rand(1, RANDOM_MAX); $result = array_flip(array_flip($result)); //array_flip将数组的key和value交换 } return $result;}class time { private $_start; public function time_start() { $this->_start = $this->microtime_float(); } public function time_spend() { return $this->microtime_float() - $this->_start; } private function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); }} ?>
네 번째 방법인 뒤집기 방법에 대해 array_flip() code> 배열의 키와 값을 뒤집습니다. PHP 배열 기능을 사용하면 중복된 키를 덮어쓰게 됩니다. 이때 다시 뒤집는 것은 중복된 값을 제거하는 것과 같습니다. <br>위 방법은 단순한 예일 뿐이며 일부 방법은 적용 범위가 제한되어 있습니다. <code>array_flip()
将数组的键和值翻转,利用php数组特性,重复的键会覆盖,此时再翻转一次,就相同于去掉了重复的值。
以上几种方法只是简单的例子,有的方法适用范围有限。
在看看几种方法的效率:
用array_unique()
在数组较大时性能比较差,当然shuffle()
array_unique() 코드 사용 >배열이 크면 성능이 저하됩니다. 물론 <code>shuffle()
도 이로 인해 영향을 받습니다. 🎜🎜🎜관련 학습 권장 사항: 🎜초보부터 마스터까지 PHP 프로그래밍🎜🎜🎜위 내용은 PHP에서 반복되지 않는 난수와 배열을 생성하는 4가지 방법 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!