程序输出结果老是有连续重复 php 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想,你应该补习一下相关的数学知识了!内层 28外层 10000总计 2800006个数字的集合从 000000 到 999999所以只有顺序从该集合中抽取 280000 个元素,才不可能出现重复(当然集合中元素的位置是可以打乱的) php 的伪随机数发生器的周期是 32768也就是说 32768 次之后必然出现重复等何况你需求的总量比伪随机数周期的高出一个数量级,这必然会出现重复的所以你需要自己写一个伪随机数发生器来突破这个周期限制比如define('RAND_MAX', pow(2, 27));function my_rand() { static $r = 0; if($r == 0) $r = time();//以当前时间做种子 $r = ($r * 123 + 59) % RAND_MAX; if($r < 0) $r += RAND_MAX; return $r;}测试for($i=0; $i<1000000; $i++) { $c = my_rand(); @$t[$c]++;//对每个数出现的次数进行计数,多于 1 就是重复了}print_r(array_count_values($t));//统计数组中出现的相同值的次数结果Array( [1] => 1000000)表示没有出现重复pow(2, 27) 等于 134217728表示相同的种子在 134217728 次中不会出现重复 php-5.4.10.tar.gz和php-5.4.10-Win32-VC9-x86.zip有什么区别? 求教一个关于PHP多站点路径的问题 php小问题,请高手指导,谢谢! 求租:数组累加 PHP或者ZF框架开发的项目,如何调用用户机器里安装的邮件客户端? php中提到的文件上载是什么意思? php循环 怎么得不到新增加记录的自动递增字段的值? cookie问题,,高分相送 倡议: 论坛数据采用xml来标准化, 推行xmlBBS!! 各位大神,求助下载文件之后跳转的问题~ 这种数组该如何输出
外层 10000
总计 280000
6个数字的集合从 000000 到 999999
所以只有顺序从该集合中抽取 280000 个元素,才不可能出现重复(当然集合中元素的位置是可以打乱的) php 的伪随机数发生器的周期是 32768
也就是说 32768 次之后必然出现重复
等何况你需求的总量比伪随机数周期的高出一个数量级,这必然会出现重复的所以你需要自己写一个伪随机数发生器来突破这个周期限制
比如define('RAND_MAX', pow(2, 27));
function my_rand() {
static $r = 0;
if($r == 0) $r = time();//以当前时间做种子
$r = ($r * 123 + 59) % RAND_MAX;
if($r < 0) $r += RAND_MAX;
return $r;
}
测试for($i=0; $i<1000000; $i++) {
$c = my_rand();
@$t[$c]++;//对每个数出现的次数进行计数,多于 1 就是重复了
}
print_r(array_count_values($t));//统计数组中出现的相同值的次数结果
Array
(
[1] => 1000000
)
表示没有出现重复pow(2, 27) 等于 134217728
表示相同的种子在 134217728 次中不会出现重复