搜索
首页后端开发php教程PHP高效生成一个不重复随机数
PHP高效生成一个不重复随机数Aug 21, 2019 pm 06:10 PM
随机数

PHP生成一个随机数组的封装方法

/*
* 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;
}

该方法以每次获取随机数存入数组再去重...效率低下...不想用

PHP高效产生m个n范围内的不重复随机数(m<=n)

注:在《 Programming Pearls 》一书中也有提到,题目为“如何高效产生m个n范围内的不重复随机数(m<=n)”

该算法非常巧妙的取随机数的位置(数组的下标),替代取随机数本身,每次取到一个随机数之后,就将其在取值范围中排除,下一次仅会在剩下的数字中取,一次遍历就可以完成随机数的选取,效率相当高。

function rand_num($num=&#39;200&#39;){
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、第一步,为数组的每个数字按其下标顺序赋值,获得一个 $num 个数字键值对应顺序排列的数组。

2.第二步,开始取范围[ i,$num-1 ]范围内的随机数$rand,并将获取到的随机数$rand作为数组中当前位置 键i对应下标的值$rand,将数组中 键$rand对应下标的值替换为 i,这其实就是数组键值交叉互换。意义是,将已经生成的随机数在取值范围[ i,$num-1 ]中排除,下次会在剩下的数字中[ i+1,num-1 ]取值。

3.第三步,为避免重复取值,只在未改变的键值对中进行交替运算,即在原数组顺序排列 (键==值) 的位置进行交替运算。

4.结束

1566382090(1).jpg

如上图,获取10个随机数部分试例。

更多PHP相关问题请访问PHP中文网:PHP视频教程

以上是PHP高效生成一个不重复随机数的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
如何在 Excel 中创建随机数生成器如何在 Excel 中创建随机数生成器Apr 14, 2023 am 09:46 AM

如何使用 RANDBETWEEN 在 Excel 中生成随机数如果要生成特定范围内的随机数,RANDBETWEEN 函数是一种快速简便的方法。这允许您在您选择的任何两个值之间生成随机整数。使用 RANDBETWEEN 在 Excel 中生成随机数:单击您希望出现第一个随机数的单元格。键入=RANDBETWEEN(1,500)将“1”替换为您要生成的最低随机数,将“500”替换为

Java随机数生成性能优化方法Java随机数生成性能优化方法Jun 30, 2023 pm 12:25 PM

如何优化Java开发中的随机数生成性能随机数在计算机科学中有广泛的应用,特别是在密码学、模拟、游戏等领域。在Java开发中,我们常常需要生成随机数来满足各种需求。然而,随机数生成的性能通常是开发者关注的问题之一。本文将探讨如何优化Java开发中的随机数生成性能。使用ThreadLocalRandom类在Java7中引入了ThreadLocalRandom类

深入了解numpy中的随机数生成方法和应用深入了解numpy中的随机数生成方法和应用Jan 03, 2024 am 08:23 AM

探索NumPy生成随机数的方法及应用引言:随机数在计算机科学和统计学中有着广泛的应用,例如模拟实验、数据生成和特征选择等。在Python中,NumPy(NumericalPython)库是一个强大的数值计算库,提供了许多用于生成随机数的函数。本文将对NumPy中的随机数生成方法进行探索,并给出具体的代码示例。一、NumPy的随机数生成函数NumPy提供

使用Go语言文档中的crypto/rand.Read函数生成随机数使用Go语言文档中的crypto/rand.Read函数生成随机数Nov 04, 2023 pm 03:39 PM

使用Go语言生成随机数Go语言是一种现代化、简洁和高效的编程语言,提供了许多内置库,可用于生成随机数。其中,crypto/rand包提供了一系列函数来生成安全的随机数。在本文中,我们将通过使用crypto/rand包中的Read函数来生成随机数。首先,我们需要导入crypto/rand包,并创建一个字节数组来存储随机数。代码示例如下:packagemain

如何使用PHP数组生成随机数和验证码如何使用PHP数组生成随机数和验证码Jul 16, 2023 am 08:31 AM

如何使用PHP数组生成随机数和验证码随机数和验证码在开发网站和应用程序过程中非常常见。PHP提供了各种方法来生成随机数和验证码。本文将介绍如何使用PHP数组生成随机数和验证码,并附带相应的代码示例。一、生成随机数在PHP中,我们可以使用rand()函数来生成随机数。rand()函数需要两个参数,即最小值和最大值。示例代码如下:$min=1;$max=

如何避免在 Golang 中生成重复的随机数?如何避免在 Golang 中生成重复的随机数?Jun 01, 2024 pm 04:46 PM

在Golang中避免生成重复随机数的方法:创建一个新的随机数生成器rand.New(rand.Source)。使用rand.NewSource(time.Now().UnixNano())作为熵源。使用rand.Intn(n)生成随机整数。

如何在 Golang lambda 函数中生成随机数?如何在 Golang lambda 函数中生成随机数?Jun 05, 2024 pm 12:22 PM

在Golambda函数中生成随机数,需要使用math/rand库:导入库并设置种子以确保不同输出。使用rand.Intn(max)生成随机整数(范围[0,max))。使用rand.Float64()生成随机小数(范围[0.0,1.0))。使用rand.ReadStringN(n)生成随机字符串(长度为n)。

使用java的Math.random()函数生成随机数使用java的Math.random()函数生成随机数Jul 24, 2023 am 08:45 AM

使用Java的Math.random()函数生成随机数随机数在计算机编程中是非常常用的概念,可以帮助我们实现各种功能,比如生成随机密码、抽奖、游戏中的随机事件等等。在Java中,我们可以使用Math.random()函数来生成随机数。Math.random()函数是Java标准库中的一个静态方法,它返回一个大于或等于0且小于1的随机double类型数字。通过

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具