我需要從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