PHP生成指定范围内的N个不重复的随机数


Posted in PHP onMarch 18, 2019

思路:将生成的随机数存入数组,再在数组中去除重复的值,即可生成一定数量的不重复随机数。

在PHP网站开发中,有时候我们需要生成指定范围内一定数量的不重复随机数,具体怎么设计这个生产随机数的函数呢?我们可以将随机产生的数存入数组,但在存入的同时去除重复的值,即可生成一定数量的不重复随机数。当然也可以把指定范围内的数值存进数组,再使用shuffle($array)打乱这个数组,然后再截取其中一定数量的值。但后面的一种做法在指定的随机数范围太大的时候会产生一个较大的数组。

下面给出第一种做法的代码,第二种做法更简单,大家可以尝试下,其实也差不多

<?php
/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定数量的不重复随机数,指定的范围内整数的数量必须
* 比要生成的随机数数量大
* $min 和 $max: 指定随机数的范围
* $num: 指定生成数量
*/
function unique_rand($min, $max, $num) {
  $count = 0;
  $return = array();
  while ($count < $num) {
    $return[] = mt_rand($min, $max);
    $return = array_flip(array_flip($return));
    $count = count($return);
  }
  //打乱数组,重新赋予数组新的下标
  shuffle($return);
  return $return;
}

//生成10个1到100范围内的不重复随机数
$arr = unique_rand(1, 100, 10);
echo implode($arr, ",");
?>

程序运行如下:

48,5,19,36,63,72,82,77,46,16

补充几点说明:

1、生成随机数时我们用了 mt_rand() 函数。这个函数生成随机数的平均速度要比 rand() 快几倍。

2、去除数组中的重复值时用了“翻转法”,就是用 array_flip() 把数组的 key 和 value 交换两次。这种做法在去除数组重复值的同时效率也比用 array_unique() 快得多。

3、返回数组前,先使用 shuffle() 为数组赋予新的键名,保证键名是 0-n 连续的数字。如果不进行此步骤,可能在删除重复值时造成键名不连续,如果用for遍历的时候会有问题,但如果用foreach或不需要遍历的时候可以不需要shuffle。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
php 获取客户端的真实ip
Nov 30 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
php读取excel文件的简单实例
Aug 26 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
PHP实现远程下载文件到本地
May 17 PHP
curl和libcurl的区别简介
Jul 01 PHP
PHP导出Excel实例讲解
Jan 24 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
Mar 15 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 #PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 #PHP
PHP标准库(PHP SPL)详解
Mar 16 #PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 #PHP
php生成word并下载代码实例
Mar 15 #PHP
PHP-FPM的配置与优化讲解
Mar 15 #PHP
php-fpm中max_children的配置
Mar 15 #PHP
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
如何获得PHP相关资料
2006/10/09 PHP
php 高效率写法 推荐
2010/02/21 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP7 新增常量
2021/03/09 PHP
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
中间件分为哪几类
2016/09/18 面试题
我的求职计划书
2014/01/10 职场文书
共产党员公开承诺书
2014/03/25 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
张思德观后感
2015/06/09 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
电频谱管理的原则是什么
2022/02/18 无线电
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL