alternativas a php in_array para arreglos grandes para evitar entradas duplicadas
Necesito generar una lista grande de números aleatorios de 600k a 2000k, pero la lista no puede tener duplicados.
Mi 'implementación' actual se ve así:
<?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);
?>
Si guardo elin_array
La prueba comentó que el tiempo de procesamiento es de alrededor de 1 segundo, por lo quemt_rand
llamadas y elused
el relleno de matrices es relativamente 'barato', pero cuando descomprimo la prueba de in_array, ¡suceden cosas malas! (Estoy esperando, han pasado más de 10 minutos, a que termine el script ...)
Así que estoy buscando alternativas ya sea en el lado de detección de duplicados o en la parte de generación (¿Cómo podría generar números aleatorios sin el riesgo de obtener duplicados)
Estoy abierto a cualquier sugerencia.