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

摘要:
$return=数组_翻转;//将数组数存储在变量count$count=count;}//中为数组分配一个新的键名shuffle;return$return;}?˃还有几个注意事项:mt用于生成随机数s_Rand()函数。此函数生成随机数的平均速度是rand()的四倍。“flip”方法用于删除数组中的重复值,即array_flip()两次交换数组的键和值。在返回数组之前,使用shuffle()为数组分配一个新的键名,并确保键名是一个0-n连续数字。如果不执行此步骤,则在删除重复值时可能会导致键名不连续,从而给遍历带来麻烦。

<?php

/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定数量的不重复随机数
* $min 和 $max: 指定随机数的范围
* $num: 指定生成数量
*/

//随机生成不重复的N个数
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;
}

?>

补充几点说明:

生成随机数时用了 mt_rand() 函数。这个函数生成随机数的平均速度要比 rand() 快四倍。
去除数组中的重复值时用了“翻翻法”,就是用 array_flip() 把数组的 key 和 value 交换两次。这种做法比用 array_unique() 快得多。
返回数组前,先使用 shuffle() 为数组赋予新的键名,保证键名是 0-n 连续的数字。如果不进行此步骤,可能在删除重复值时造成键名不连续,给遍历带来麻烦。

免责声明:文章转载自《PHP生成一个不重复随机数组的封装方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS Swift传统css布局方案(position,float,line-height等配合)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS: 实现微信支付

一、介绍: 现在的消费越来越方便,直接带个手机用各种三方的支付平台进行支付就行,例如微信、支付宝。现在正好我所做的项目中用到了微信支付,今天就来整理一下。 二、准备: 1、去微信官方开发者平台注册开发者账号:https://open.weixin.qq.com 2、然后登陆开发平台: 3、给项目对应的Bundle ID创建应用程序(默认有登陆和分享功能,...

JAVA随机数生成Int、Long、Float、Double

随机数Int的生成 生成无边界的Int @Test public void testRandom_generatingIntegerUnbounded() throws Exception { int intUnbounded = new Random().nextInt(); System.out.println(intUnbounded)...

当前日期+随机数+文件名(采用两种方法实现的工具类)

          多文件上传下载时,常常需要考虑上传统一文件多次,怎来精准的区别文件的名字,下面两种方法都可以实现1.第一种实现方式 //从服务端传过来的path路径截取文件名 String name = path.substring(39); SimpleDateFormat format = new SimpleDateFormat("yyyyMMd...

Java 生成指定时间范围的随机时间、随机中文姓名、随机字符姓名、随机数

解决问题: Java生成指定时间范围的随机时间? Java生成随机中文姓名? Java生成随机字符姓名? Java生成随机数? 代码: import java.io.UnsupportedEncodingException; import java.text.ParseException; import java.text.SimpleDateFormat...

HTTPS通信原理-证书交换

TLS握手过程 握手简述(以RSA为例): client hello:客户端给出TLS协议版本号,支持的加密算法、随机数Client random、扩展字段 server hello:服务端确认双方可支持的加密算法,并把数字证书下发给客户端。同时也会生成一个随机数Server random 客户端验证证书的有效性,并重新生成一个随机数Pre-main s...

ZH奶酪:【Python】random模块

Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍。如下:random.random() 用于生成一个0到1的随机浮点数。如: import random random.random() 输出: 0.3701787746508932 random.uniform(a,b) 用于生成一个指定范围内的随机浮点数,两个参...