php生成不重复随机数
① php生成随机数字,范围1-100,每次生成一个数字,可以重复
echomt_rand(1,100);
请使用rand函数
intrand(int$min,int$max)
使用循环生成,假如想生成512个数字,就可以像这样:
$num = 1;//初始化一个变量为1
for($i = 1; $i <= 512; $i++)//这个是看你要生成多少个数字,然后循环生成
{
if($num >= 100)
$num = 1;//若变量的数字大于一百,则返回变成1
echo $num."</br>";//输出变量数字,即生成的数字,后面的</br>是换行
$num++;//然后将变量加1,即在前面生成的数字基础上加一
}
(1)php生成不重复随机数扩展阅读:
密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。
真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。
② php随机生成数据库中不存在、不重复数字
说下思路:
1. 将生成的数字保存到mysql数据库,然后每次生成的号码不能与数据库的数字重复,请问怎么弄?
先读取数据库已存在的数字,将结果以数组格式,与rand(1,1000)的数组相比较计算前宏差集,去除这部分数字(array_diff),再shuffle,得到新的随机数。
我觉得,你完全可以建立一个序号表,比如,1-陵判1000,每次用时先用随机函数取(1-数据记录数)个数值,再用这个数值取得相应的记录,当取出之后,删除这个记录,这样保证记录总数一直会减少且数字也不会重复。
2. 有没有什么办法生成的时候先生成一位数的,一位数生成满了以后再生出两位数的,两位数满了然后再三位数的,以此类推?
先获取一位数的记录,再从中随机抽取一个,如果数据库中没有找到一位数的,就递增一位数,直到找到为止。
3. 代码的执行效率希望能越高越好!
如果想要代码执行效率,最好尽量减少与数据库的交互尺悔改。
③ PHP产生不重复随机数的5个方法总结
无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地。在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下(ps:方法1、4、5是我常用的,其余来自网络整理)
方法一:
复制代码
代码如下:
<?php
$numbers
=
range
(1,50);
//shuffle
将数组顺序随即打乱
shuffle
($numbers);
//array_slice
取该数组中的某一段
$num=6;
$result
=
array_slice($numbers,0,$num);
print_r($result);
?>
方法二:
复制代码
代码如下:
<?php
$numbers
=
range
(1,20);
//播下随机数发生器种子,可有可无,测试后对结果没有影响
srand
((float)microtime()*1000000);
shuffle
($numbers);
//跳过list第一个值(保存的是索引)
while
(list(,
$number)
=
each
($numbers))
{
echo
"$number
";
}
?>
方法三:
复制代码
代码如下:
<?php
function
NoRand($begin=0,$end=20,$limit=5){
$rand_array=range($begin,$end);
shuffle($rand_array);//调用现成的数组随机排列函数
return
array_slice($rand_array,0,$limit);//截取前$limit个
}
print_r(NoRand());
?>
上述可以在1-20间随机产生5个不重复的值
方法四:
复制代码
代码如下:
<?php
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
?>
方法五:
复制代码
代码如下:
<?php
$tmp
=
range(1,30);
print_r(array_rand($tmp,10));
?>
这个可能是比叫简单的了(ps:如果在range中指定了步长,就必须注意array_rand的第二个参数是否超出$tmp的长度)。
PHP提供非常丰富的数组函数,产生随机数大多可以从数组这个角度出发,若你还有方法提供,欢迎给出,文章将持续更新。
④ PHP基于自增数据如何生成不重复的随机数示例
1、 $base 基数组 如果是8位这个数组必须是8位
2、 $i 自增数,自增数不能超过8位数
当前简单分析的结果就是以上。大家如果是全局不重复,还是建议使用uuid之类的比较合适。
⑤ php向一个空数组中添加1000个不重复的数字,要求:数字需要在0-3000中产的代码
// 1、首先定义一个空的目标数组
$arr = [];
// 2、开始for循环
for ($i = 0; $i < 1000; ) {
****// 3、获取0~3000之间的随机数
****$r = rand(0, 3000);
****// 4、判断该随机数是否存在目标数组中
****if (!in_array($r, $arr)) {
********// 5、如果不存在,则将该随机数添加到目标数组中
********$arr[] = $r;
********// 6、最关键的一步:只有向目标数组添加新值的时候才改变$i的值
********$i ++;
****}
****continue;
}
// 7、最后打印出目标数组,也可使用print_r函数
var_mp($arr);
die;
总结:该题的难点在于在什么时候再改变计数器变量$i的值,只有数组元素新增的时候才能改变$i,使其加1,当然for循环体也可反向写,也可采用别的循环结构,留给你自己发挥^>^。
希望能帮助到你,望采纳,谢谢~
⑥ php 随机生成不重复用户ID
php可以使用uniqid函数生成唯一的ID
uniqid — 生成一个唯一ID
stringuniqid([string$prefix=""[,bool$more_entropy=false]])
获取一个带前缀、基于当前时间微秒数的唯一ID。
参数说明:
prefix:有用的参数。例如:如果在多台主机上可能在同一微秒生成唯一ID。
prefix为空,则返回的字符串长度为13。more_entropy 为 TRUE,则返回的字符串长度为23。
more_entropy:如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。使得唯一ID更具唯一性。
返回值:
返回字符串形式的唯一ID。
⑦ php生成三个数字并且任意两个不重复
<?php
$arr=array(1,2,3,4,5,6,7,8);
$str="";
for($i=0;$i<3;$i++){
$index=rand(0,count($arr)-1);
while(!isset($arr[$index])){
$index=rand(0,count($arr)-1);
}
$str.=$arr[$index];
unset($arr[$index]);
}
echo$str;
?>
//如果不是这个意思再补充提问,我继续帮你弄
⑧ php 生成多个(比如1w个)不重复的12位随机数,请教!
一般来说你一次搞这么多随机数,每次单独随机排重,1w个随机数弄下来效率就不行了,比较随机函数算法还是效率不是很高;
我感觉最简单做法,先弄好12位按顺序生成大数组,第一种就是array_rand
随机取,第二种就是把12打乱,然后用array_slice取1万条;你这个问题我关注一下,看看其他有没有好办法。