我需要从600k到2000k生成一个大的随机数列表,但 列表不能有重复。php in_array替代大数组避免重复条目
我目前的“执行”看起来是这样的:
<?php
header('Content-type: text/plain');
$startTime = microtime(true);
$used = array();
for ($i=0; $i < 600000;) {
$random = mt_rand();
//if (!in_array($random, $used)) {
$used[] = $random;
$i++;
//}
}
$endTime = microtime(true);
$runningTime = $endTime - $startTime;
echo 'Running Time: ' . $runningTime;
//print_r($used);
?>
如果我把in_array
测试评价处理时间为1秒左右,所以 的mt_rand
调用和used
阵列填充相对“便宜”但是当我取消注释 in_array测试不好的事情发生! (我只是在等待 - 它已经超过10分钟了 - 脚本终止了......)
所以我正在寻找替代品在重复检测或生成部分(我怎么能生成随机数字没有获得重复的风险)
我愿意接受任何建议。
谢谢!运行时间的差异非常大!即使运行循环2000k次。它闪电般快! – Cesar 2009-09-22 06:59:40
+1。这种方式很好,因为in_array不仅运行速度慢,而且还会记忆。在减少了大约20个案例,并且从in_array中删除了所有这些案例之后,我在关键资源上节省了1.2MB内存,服务于2500万用户。 – 2012-10-30 07:47:23