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.