Home > Article > Backend Development > php random number does not repeat
PHP efficiently generates m non-repeating random numbers within the range of n (m
##Note: It is also mentioned in the book "Programming Pearls", the title is "How to efficiently generate m non-repeating random numbers in the range of n (mGetting Started with PHP Programming To master)
This algorithm very cleverly takes the position of the random number (the subscript of the array) instead of taking the random number itself. Every time a random number is taken, it is Exclude it from the value range, and only the remaining numbers will be selected next time. The selection of random numbers can be completed in one traversal, which is quite efficient.
function rand_num($num='200'){ for($i=0;$i<$num;$i++){ $n[$i] = $i; } for($i=0;$i<$num;$i++){ $rand = mt_rand($i,$num-1); //数组 随机数交换下标 if($n[$i] == $i){ $n[$i] = $n[$rand]; $n[$rand] = $i; } } }1. The first step is to assign a value to each number in the array in the order of its subscript, and obtain an array of $num numeric key values arranged in corresponding order. 2. In the second step, start to get the random number $rand in the range [i, $num-1], and use the obtained random number $rand as the subscript corresponding to the current position key i in the array. Value $rand, replace the value corresponding to the subscript of key $rand in the array with i. This is actually a cross-exchange of array key values. The meaning is to exclude the generated random number from the value range [i,$num-1], and next time it will take the value from the remaining numbers [i 1,num-1]. 3. The third step, in order to avoid repeated values, only perform alternating operations on the unchanged key-value pairs, that is, perform alternating operations on the positions where the original array is arranged sequentially (key == value). 4. End.
The above is the detailed content of php random number does not repeat. For more information, please follow other related articles on the PHP Chinese website!