php怎么随机数不重复
时间 : 2023-04-24 23:34:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性
在 PHP 中,可以使用 `mt_rand()` 函数和数组来生成不重复的随机数。
`mt_rand()` 函数是一个基于 Mersenne Twister 算法的伪随机数生成器,可以用于生成指定范围内的随机整数。
具体实现步骤如下:
1. 定义一个空数组 `$nums`,用于存储生成的随机数。
2. 使用 `mt_rand()` 函数生成一个随机数 `$num`,判断是否已经存在于数组 `$nums` 中,如果不存在,则将该数加入数组中,否则重新生成一个随机数。
3. 重复步骤 2 直到生成所需个数的随机数。
示例代码如下:
```php
/**
* 生成 $count 个不重复的随机数
*
* @param int $count 需要生成的随机数个数
* @param int $min 随机数范围的最小值
* @param int $max 随机数范围的最大值
* @return array 生成的随机数数组
*/
function generateUniqueRandomNumbers($count, $min, $max) {
$nums = array();
while (count($nums) < $count) {
$num = mt_rand($min, $max);
if (!in_array($num, $nums)) {
$nums[] = $num;
}
}
return $nums;
}
// 生成 5 个在 1 到 50 之间不重复的随机数
$nums = generateUniqueRandomNumbers(5, 1, 50);
print_r($nums);
运行结果类似如下:
Array
(
[0] => 31
[1] => 24
[2] => 49
[3] => 16
[4] => 6
)
这样就可以在 PHP 中生成指定范围内的不重复随机数了。
在 PHP 中生成随机数可以使用 `rand()` 或者 `mt_rand()` 函数,但是这些函数无法确保生成的随机数不重复。如果你需要生成一些不重复的随机数,可以使用以下两种方法:
1. Fisher-Yates 算法
Fisher-Yates 算法是一种随机置换算法,可以用于将一个数组随机排序。我们可以使用这个算法生成一组不重复的随机数。具体实现方法如下:
```php
function fisher_yates_shuffle($arr) {
$count = count($arr);
for($i = $count - 1; $i > 0; $i--) {
$j = mt_rand(0, $i);
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
return $arr;
}
// 生成一组不重复的随机数
$arr = range(1, 10);
$shuffle_arr = fisher_yates_shuffle($arr);
在这个函数中,我们首先生成一个包含从 1 到 10 的整数的数组,然后使用 Fisher-Yates 算法将数组随机排序,最后返回这个随机排序后的数组。
2. 洗牌算法
洗牌算法是一种生成不重复随机数的高效算法。它的基本思想是:生成一组序列,然后将这些序列随机交换位置,最后取出前面的若干个数作为不重复随机数。具体实现如下:
```php
function shuffle_array($arr, $num) {
$count = count($arr);
for($i = 0; $i < $count; $i++) {
$j = mt_rand(0, $count - 1);
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
return array_slice($arr, 0, $num);
}
// 生成一组不重复的随机数
$arr = range(1, 10);
$shuffle_arr = shuffle_array($arr, 5);
在这个函数中,我们首先生成一个包含从 1 到 10 的整数的数组,然后使用洗牌算法将数组随机打乱,最后取出前面的 5 个数作为不重复随机数。
无论是用 Fisher-Yates 算法还是洗牌算法,都可以生成一组不重复的随机数,但是如果需要生成的随机数比较多,或者需要在每次运行程序时生成不同的随机数,这些算法可能效率比较低。如果你需要高效地生成大量不重复的随机数,可以考虑使用哈希算法或者 bloom filter 算法。
上一篇
php数组的输出怎么看
下一篇
php怎么不重复随机数
https/SSL证书广告优选IDC>>
推荐主题模板更多>>
推荐文章