Alternativen zu PHP in_array für große Arrays, um doppelte Einträge zu vermeiden

Ich muss eine große Liste von Zufallszahlen von 600.000 bis 2.000.000 generieren, aber die Liste darf keine Duplikate enthalten.

Meine aktuelle Implementierung sieht folgendermaßen aus:

<?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);
?>

Wenn ich das behaltein_array test kommentiert die bearbeitungszeit ist ca. 1 sekunde, also diemt_rand Anrufe und dieused Array-Füllung ist relativ "billig", aber wenn ich den in_array-Test auskommentiere, passieren schlimme Dinge! (Ich warte nur - es sind mehr als 10 Minuten vergangen -, bis das Skript beendet ist ...)

Also suche ich nach Alternativen entweder auf der Seite der Duplikaterkennung oder im Generierungsteil (Wie könnte ich Zufallszahlen generieren, ohne das Risiko von Duplikaten)

Ich bin offen für jeden Vorschlag.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage