Php 高效生成一亿个随机整数

Php 高效生成一亿个随机整数,php,arrays,Php,Arrays,我想使用PHP生成一亿个整数,但我的代码太慢,无法运行: <?php $arr=array(); while(count($arr)<10000) { $arr[]=rand(1,10000); $arr=array_unique($arr); } echo implode(" ",$arr); ?> 如何改进它?100000000个数字非常雄心勃勃,也不太现实,但是,在我的计算机上,英特尔Core i5-3320M 2.6GHz,8GB内存,Windows7 64位

我想使用PHP生成一亿个整数,但我的代码太慢,无法运行:

<?php
$arr=array();
while(count($arr)<10000)
{
  $arr[]=rand(1,10000);
  $arr=array_unique($arr);
}
echo implode(" ",$arr);
?>
如何改进它?

100000000个数字非常雄心勃勃,也不太现实,但是,在我的计算机上,英特尔Core i5-3320M 2.6GHz,8GB内存,Windows7 64位,PHP7.1.3应该比5.x更好,在我杀死它之前,你的循环运行了大约8个小时。它只运行了10000次,1596秒,即27分钟

除了迭代次数之外,主要问题是数组的唯一性。每次迭代都需要时间在不断增加的(有时是巨大的)数组上运行,并且可能会删除一个需要重新生成的项

我尝试了一种更好的方法,用数字作为键来避免重复。它的内存限制为7G,并且由于内存不足而导致致命错误而死亡,运行时间为1018秒,即17分钟。仅10000次,运行时间为0.0035秒:


我无法让它运行,即使我增加了内存限制,也会耗尽内存,但是$arr=Range1100000000;洗牌$arr@Abracadver自己也得出了同样的结论。我尝试了1000000个,但更多的零破坏了内存。当然,它很快就完成了任务。你应该在答案中添加注释。也许数字太多了,我编辑了它,我如何改进它?@Manngo:添加了一些有趣的东西。
ini_set('memory_limit', '7G');

$arr = array();
while(count($arr) < 100000000)
{
  $num = rand(1, 100000000);
  $arr[$num] = $num;
}
ini_set('memory_limit', '550M');

$arr = range(1, 10000000);
shuffle($arr);