alternatywy dla php in_array dla dużych tablic w celu uniknięcia duplikatów wpisów
Muszę wygenerować dużą listę liczb losowych od 600k do 2000k, ale lista nie może mieć duplikatów.
Moja obecna „implementacja” wygląda tak:
<?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);
?>
Jeśli zatrzymamin_array
test skomentował czas przetwarzania około 1 sekundy, więcmt_rand
połączenia iused
Wypełnianie tablicy jest stosunkowo „tanie”, ale gdy odkomentuję, zdarza się, że test in_array jest zły! (Czekam tylko - minęło ponad 10 minut - aby skrypt zakończył się ...)
Więc szukam alternatyw albo po stronie zduplikowanej detekcji, albo w części generowania (jak mogę wygenerować losowe liczby bez ryzyka uzyskania duplikatów)
Jestem otwarty na wszelkie sugestie.