PHP随机数问题 生成的5位不重复整数和生成的5位相邻不重复整数的代码,这个不会,谁会,麻烦告诉我一下,谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写个伪代码:number = rand(10000-99999)while(true)if(in_array( number, isExistArray()){number = rand(10000-99999)}else{isExistArray[] = number;break;}print_r(isExistArray); $arr1 = array();$arr2 = array();$count = 5;//个数$numbers = range (0,10);//[0,10]shuffle ($numbers);$arr1 = array_slice($numbers,0,$count);print "<pre>";print_r($arr1);//输出组1$seed = rand(0,100);//[0,100]for($j=0;$j<$count;++$j){$arr2[$j] = $seed++;//相邻是不会重复的,如有区间限制,此处需处理,例如超过100}print_r($arr2);//输出组2Array( [0] => 0 [1] => 1 [2] => 5 [3] => 7 [4] => 3)Array( [0] => 16 [1] => 17 [2] => 18 [3] => 19 [4] => 20) 楼主franzhong你说的方法可以产生一个没有重复的5位数,但是你的这个5位数的第一个数字有可能是0,有什么方法是产生第一个数字不是0。而产生一个相邻的数字不能相等的5位数,你将它当作是产生5个不相等的数字处理了,很谢谢你的答案,对我有用。 楼主franzhong你说的方法可以产生一个没有重复的5位数,但是你的这个5位数的第一个数字有可能是0,有什么方法是产生第一个数字不是0。而产生一个相邻的数字不能相等的5位数,你将它当作是产生5个不相等的数字处理了,很谢谢你的答案,对我有用。 rand(10000, 99999)php 的随机数发生器的周期为 pow(2, 15) ,所以你一次性在循环中产生的随机数个数小于 32768 时,是不会出现重复的但超过周期时或多次运行生成程序时就不能保证唯一了。你需要缓存结果并检查重复只取相邻不重复整数时只需过滤含有相邻重复的结果就行了do { $num = rand(10000, 99999);while(preg_match('/(\d)\\1/', $num)); 上面那个楼主说:生成时候后0改为1不就不会有0了,这句话说的不对了啊,你改1了,那么后面的4位数如果有1的话,那就是1重复,而且你将0改1,这个不是太符合随机生成,有一点点人为性了。现在又遇到一个问题,就是最后输出是Array( [0] => 0 [1] => 9 [2] => 8 [3] => 6 [4] => 3)我需要的是一个5位数,比如50721,老师给我的题目是时间+随机5位数,时间可以用date(),5位数这个怎么解决呢?谢谢大家了啊 呵呵,楼主是指提问者.其它都是楼上,说第几楼或粘贴名字就对了."老师给我的题目是时间+随机5位数."这样的话,你根本不用考虑随机数是什么.uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。再加上一个任意的随机数,这个加应该是字串连接吧,这样两者相加的结果,已经能保证唯一性了.不需要检测. php调用外部exe程序 一个基本问题 越来越没信心了 留言本提交页面的问题?求助 Smarty模板的问题,出现奇怪的东西~~~ cli模式的stream_socket_accept函数问题 加急:执行一个php连接mysql的语句结果提示;Fatal error: Call to undefined function: mysql_connect() 这个计时系统用什么做好啊? 请问Mysql数据库超过多大速度会明显变慢?另外如果结构一样的的记录越来越多的时候 表单难题!!!高手快!快!快!!!马上送分 调用摄像头拍照 PHP 登陆错误问题
if(in_array( number, isExistArray())
{
number = rand(10000-99999)
}
else
{
isExistArray[] = number;
break;
}print_r(isExistArray);
$arr1 = array();
$arr2 = array();
$count = 5;//个数$numbers = range (0,10);//[0,10]
shuffle ($numbers);
$arr1 = array_slice($numbers,0,$count);print "<pre>";
print_r($arr1);//输出组1$seed = rand(0,100);//[0,100]
for($j=0;$j<$count;++$j){
$arr2[$j] = $seed++;//相邻是不会重复的,如有区间限制,此处需处理,例如超过100
}
print_r($arr2);//输出组2Array
(
[0] => 0
[1] => 1
[2] => 5
[3] => 7
[4] => 3
)
Array
(
[0] => 16
[1] => 17
[2] => 18
[3] => 19
[4] => 20
)
时,是不会出现重复的
但超过周期时或多次运行生成程序时就不能保证唯一了。你需要缓存结果并检查重复只取相邻不重复整数时只需过滤含有相邻重复的结果就行了
do {
$num = rand(10000, 99999);
while(preg_match('/(\d)\\1/', $num));
Array
(
[0] => 0
[1] => 9
[2] => 8
[3] => 6
[4] => 3
)
我需要的是一个5位数,比如50721,老师给我的题目是时间+随机5位数,时间可以用date(),5位数这个怎么解决呢?谢谢大家了啊
uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID。
再加上一个任意的随机数,这个加应该是字串连接吧,这样两者相加的结果,已经能保证唯一性了.不需要检测.