php随机数怎么不重复
时间 : 2023-03-27 21:15:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在PHP中生成随机数很简单,可以使用内置的rand()函数。但是如果想要生成不重复的随机数,就需要一些额外的处理。下面介绍几种生成不重复随机数的方法:

1. 使用数组去重

生成随机数后将其存入数组,每次生成随机数时判断数组中是否已存在该数,若存在则重复生成,否则将其存入数组。这种方法比较简单,但不适用于大量随机数生成,因为数组要持续存储每个生成的数,如果生成的数很多,数组将变得很长,影响性能。

$nums = array();

while(count($nums) < 10){

$num = rand(1, 100);

if (!in_array($num, $nums)) {

$nums[] = $num;

}

}

2. 使用shuffle()函数

将1~N个数存入数组,使用shuffle()函数打乱数组顺序,然后取出前M个数即可。因为shuffle()函数打乱后数组顺序是随机的,所以取出的前M个数也就是随机的。

$nums = range(1,100);

shuffle($nums);

$result = array_slice($nums, 0, 10);

3. 借助Redis的集合类型

Redis的集合(Set)类型可以存储不重复的元素,并且具有高效的判重和随机取数功能。我们可以利用Redis的Set类型来生成不重复的随机数:

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

$nums = array();

while(count($nums) < 10){

$num = rand(1, 100);

if ($redis->sAdd('random_nums', $num) == 1) {

$nums[] = $num;

}

}

$redis->del('random_nums'); //清空Set

以上是三种生成不重复随机数的方法,每种方法都有其适用场景和优缺点,具体使用需要根据实际需求和环境选择。

在PHP中,生成不重复的随机数可以使用多种方法。下面介绍两种常见的方法:

1. 使用PHP函数uniqid()生成唯一随机数

uniqid()函数可以生成一个基于当前时间的唯一字符串。可以利用这个字符串生成随机数。具体实现方法如下:

// 生成基于时间的唯一字符串

$id = uniqid();

// 转换为整型

$rand = intval($id, 16);

// 输出不重复的随机数

echo $rand;

2. 使用PHP函数array_rand()从一个数组中随机选取不重复的元素

假设我们有一个数组$numbers存有一些数字,我们可以使用array_rand()函数从中随机选取一个元素并返回其索引值。每次选取完一个元素后,我们可以将这个元素从数组中删除,这样保证每次选出的元素都不会与之前选取的元素重复。具体实现如下:

// 需要随机的数组

$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 生成10个不重复的随机数

for ($i = 0; $i < 10; $i++) {

// 随机选取一个元素

$index = array_rand($numbers);

// 输出选取的元素

echo $numbers[$index] . ' ';

// 从数组中删除已选取的元素

unset($numbers[$index]);

}

以上两种方法都可以生成不重复的随机数。选择具体方法可以根据实际需求和场景选择合适的方式。