Home >Backend Development >PHP Problem >How to use rand in php to generate non-repeating random numbers
php uses rand to generate non-repeating random numbers: first assign a value to each number in the array in order of its subscript; then start taking random numbers in the range [i, $num-1] [$ rand], and use the obtained random number [$rand] as the current position in the array; finally, perform alternating operations on the unchanged key-value pairs.
php uses rand to generate non-repeating random numbers:
/* * array unique_rand( int $min, int $max, int $num ) * 生成一定数量的不重复随机数 * $min 和 $max: 指定随机数的范围 * $num: 指定生成数量 */ function unique_rand($min, $max, $num) { //初始化变量为0 $count = 0; //建一个新数组 $return = array(); while ($count < $num) { //在一定范围内随机生成一个数放入数组中 $return[] = mt_rand($min, $max); //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。 $return = array_flip(array_flip($return)); //将数组的数量存入变量count中 $count = count($return); } //为数组赋予新的键名 shuffle($return); return $return; }
This method obtains random numbers each time Store it in an array and then remove duplicates... it's inefficient... I don't want to use PHP to efficiently generate m non-repeating random numbers in the n range (m
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 order of its subscript to obtain an array of $num numeric key values arranged in corresponding order.
2. In the second step, start taking 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. In 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.
Related free learning recommendations:php programming
The above is the detailed content of How to use rand in php to generate non-repeating random numbers. For more information, please follow other related articles on the PHP Chinese website!