Write down several methods to generate non-repeating random numbers, just go to the code
Copy code The code is as follows:
define('RANDOM_MAX', 100);
define('COUNT', 10);
echo 'max random num: '.RANDOM_MAX, ' ;result count:'.COUNT, '
';
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 '
';
}
function rand1() {
$numbers = range (1, RANDOM_MAX);
shuffle($numbers); //Shuffle the array randomly
$result = array_slice($numbers, 1, COUNT);
return $result;
}
function rand2() {
$result = array();
while(count($result)< COUNT) {
$result[] = mt_rand(1, RANDOM_MAX); //mt_rand() is a better and faster random function than rand()
$result = array_unique($result); //Delete duplicate elements in the array
}
return $result;
}
function rand3() {
$result = array();
while(count($result) < COUNT) {
$_tmp = mt_rand(1, RANDOM_MAX);
if(!in_array($_tmp, $result)) { //Insertion
is only allowed when the same element does not exist in the array
$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 exchanges the key and value of the array
}
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);
}
}
?>
Let’s talk about the fourth method, which is the flip method. Use array_flip() to flip the keys and values of the array. Using the PHP array feature, the repeated keys will be overwritten. At this time, flipping again is the same as removing them. Duplicate values.
The above methods are just simple examples, and some methods have limited scope of application.
Looking at the efficiency of several methods:
The performance of using array_unique() is poor when the array is large. Of course, shuffle() will also be affected by this.