php 生成不重复随机数

在web开发中,随机数生成是一个常见的需求,而生成不重复的随机数更是一个重要的问题。

在PHP中,可以通过使用内置的rand()函数来生成随机数,但是这种方法无法保证生成的数不会重复。那么,如何生成不重复的随机数呢?

一般而言,有两种方法可以生成不重复的随机数:一种是使用时间戳等随机种子来生成随机数,但在一定程度上仍可能存在重复的情况;另一种则是使用伪随机数生成算法,如解除时间限制的mt_rand()、加密生成的openssl_random_pseudo_bytes(),等等。

以下是一种使用伪随机数生成算法的方法:

首先,使用mt_rand()函数生成随机数,并将其存储在一个数组中。然后,使用in_array()函数检查已经生成的随机数数组中是否已经存在当前随机数,若存在则重新生成令当前随机数不重复。

代码示例:

```

//生成不重复的随机数函数

function random_numbers($count, $min, $max) {

$numbers = array();

while (count($numbers) < $count) {

$number = mt_rand($min, $max);

if (!in_array($number, $numbers)) {

$numbers[] = $number;

}

}

return $numbers;

}

//调用函数,生成10个不重复的随机数,范围在1到100之间

print_r(random_numbers(10, 1, 100));

?>

```

上述代码中,random_numbers()函数接受三个参数:随机数个数(count)、最小值(min)、最大值(max)。首先建立一个空数组$numbers存储生成的随机数。然后使用while循环来检查$numbers数组长度是否达到指定值count。如果数组长度不足,则调用mt_rand()函数生成一个当前范围内的随机数$number。使用in_array()函数检查$number是否已经存在于$numbers数组中,如果不存在则将其添加到数组中,否则重新生成随机数。最后,返回生成的不重复随机数数组。

需要注意的是,如果需要生成的随机数个数过于庞大,或者随机数的取值范围过于广泛,上述方法可能不太适用,因为其生成不重复随机数的时间复杂度可能较高,会导致内存占用过高、程序运行时间较长等问题。此时,推荐使用加密生成的openssl_random_pseudo_bytes()等函数。

另外,我们也可以将此函数封装为一个远程函数,以便在不同的PHP脚本中使用。具体如下:

1.创建文件random.php,编写随机数生成函数random_numbers()。

```

function random_numbers($count, $min, $max) {

$numbers = array();

while (count($numbers) < $count) {

$number = mt_rand($min, $max);

if (!in_array($number, $numbers)) {

$numbers[] = $number;

}

}

return $numbers;

}

?>

```

2.创建文件remote.php,通过远程调用random.php中的函数random_numbers()生成随机数。

```

//远程调用随机数生成函数

$rand = file_get_contents('http://example.com/random.php?action=random_numbers&count=10&min=1&max=100');

//将返回的JSON数据解码成PHP数组

$numbers = json_decode($rand, true);

//打印生成的随机数

print_r($numbers);

?>

```

3.修改random.php文件,将其变为远程函数,并接受客户端发送的参数。

```

//接受客户端发送的参数

$action = $_GET['action'];

if ($action == 'random_numbers') {

$count = $_GET['count'];

$min = $_GET['min'];

$max = $_GET['max'];

//调用随机数生成函数

$numbers = random_numbers($count, $min, $max);

//将数组转化为JSON格式

$result = json_encode($numbers);

//返回JSON数据

echo $result;

}

//随机数生成函数

function random_numbers($count, $min, $max) {

$numbers = array();

while (count($numbers) < $count) {

$number = mt_rand($min, $max);

if (!in_array($number, $numbers)) {

$numbers[] = $number;

}

}

return $numbers;

}

?>

```

上述代码中,当客户端通过URL访问random.php?action=random_numbers&count=10&min=1&max=100时,random_numbers()函数被调用生成随机数,并将生成的随机数数组转化为JSON格式返回给客户端。此时,客户端可通过调用file_get_contents()函数获取随机数生成结果,再将JSON数据解码成PHP数组即可。

总结起来,生成不重复随机数是一个常见的需求,在PHP中有很多生成不重复随机数的方法。此外,为了增强代码复用性和可维护性,我们还可以将随机数生成函数封装为远程函数,以便在不同的PHP脚本中使用。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(40) 打赏

评论列表 共有 1 条评论

莫筱夜 1年前 回复TA

把我对你的忍耐当成你不要脸的姿态,撅屁股看天,有眼无珠。

立即
投稿
发表
评论
返回
顶部