PHP生成不重复的n个随机数。

原因:

有25件作品要投票,一票投16票,一票只能选一次。在一个程序员面前搞砸了,忘了投票存储,200个用户生成的投票序列都是空的。那你怎么填这个洞呢

当然,情况反映给上级。但我们在这里讨论的是需要生成16个随机数,不重复间1-25和填补它的技术,如何设计一个功能的具体通过在数组中存储随机数并删除数组中的重复值,可以生成一些不重复的随机数。

下列程序如下:

复制代码代码如下所示:

< PHP

*

*阵列unique_rand(int int max min美元,美元美元,int num)

*生成一定数量的非重复随机数

*指定的随机数范围为$和max:

* $:指定生成的数量

* /

功能unique_rand(美元美元美元最大,最小,NUM){

$=0;

$ =数组();

当(计算$ $){

{ } = mt_rand回美元(美元美元min,max);

为回报= array_flip(array_flip(美元收益));

计数= $(返回);

}

洗牌(回报);

返回美元;

}

(1, 25, 16)unique_rand ARR =美元;

排序($ ARR);

结果=;

为($我= 0;$我<计数($ ARR);$我+ +)

{

结果-美元美元美元ARR { }。;

}

结果= substr($美元,0 - 1);

回波结果;

>



程序运行如下:

复制代码代码如下所示:

2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24



补充几点:

的mt_rand()函数用于生成随机数的时候,这个函数生成的随机数的平均速度比兰德快四倍()。

在读的方法去除重复值的数组中,是用array_flip(关键)的阵列和价值交换两。这种方法比array_unique快得多()。

返回之前的洗牌第一使用数组()是一个新的密钥数组,关键是保证连续数字0-n.without这一步,关键可能是在删除重复值的不连续性造成的,遍历的麻烦。