Foros del Web » Programando para Internet » PHP »

Idea para opitimizar código

Estas en el tema de Idea para opitimizar código en el foro de PHP en Foros del Web. Este trozo de código genera 4 números aleatorios diferentes dentro de un rango comprendido de 0 a $total, ¿alguna idea para optimizarlo?: srand((double)microtime()*1000000); $ale1 = ...
  #1 (permalink)  
Antiguo 25/03/2003, 13:29
 
Fecha de Ingreso: julio-2002
Ubicación: Elche
Mensajes: 153
Antigüedad: 15 años, 5 meses
Puntos: 0
Idea para opitimizar código

Este trozo de código genera 4 números aleatorios diferentes dentro de un rango comprendido de 0 a $total, ¿alguna idea para optimizarlo?:

srand((double)microtime()*1000000);
$ale1 = rand(0, $total);

srand((double)microtime()*1000000);
$ale2 = rand(0, $total);

if($ale2 == $ale1)
{
while($ale2 == $ale1)
{
srand((double)microtime()*1000000);
$ale2 = rand(0, $total);
}
}

srand((double)microtime()*1000000);
$ale3 = rand(0, $total);

if(($ale3 == $ale1) || ($ale3 == $ale2))
{
while(($ale3 == $ale1) || ($ale3 == $ale2))
{
srand((double)microtime()*1000000);
$ale3 = rand(0, $total);
}
}

srand((double)microtime()*1000000);
$ale4 = rand(0, $total);

if(($ale4 == $ale1) || ($ale4 == $ale2) || ($ale4 == $ale3))
{
while(($ale3 == $ale1) || ($ale3 == $ale2) || ($ale4 == $ale3))
{
srand((double)microtime()*1000000);
$ale4 = rand(0, $total);
}
}

Un saludo a todos.
__________________
Hazlo o no lo hagas, pero nunca lo intentes

www.clubfronteniselche.com
  #2 (permalink)  
Antiguo 25/03/2003, 14:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
1) Usar una función para el código q repites constantemente:
2) usar un array para almacenar esos numeros que generes .. para poder ver si ya los generó o no ...

(supongo que los números generados no se pueden repetir entre si? .. si se pueden repetir quita el bucle while y las variables implicadas ..)

Código PHP:
<?
function genera_numero($total){
  
srand((double)microtime()*1000000);
  return 
rand(0$total);
}

$total=10;
$numeros_generar=4;
$numeros_generados=array();

// Genera numeros.
for ($x=0$x<$numeros_generar$x++){
  
$ok_numero=FALSE;
  while (!
$ok_numero){
     
$numero_aleatorio=genera_numero($total);
     if (!
in_array($numero_aleatorio,$numeros_generados)){
        
$numeros_generados[]=$numero_aleatorio;
        
$ok_numero=TRUE;
      }
  }

}

// presenta los numeros generados.
foreach($numeros_generados as $numero){
    echo 
"Nº: ".$numero."<br>";
}
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 25/03/2003, 17:13
 
Fecha de Ingreso: julio-2002
Ubicación: Elche
Mensajes: 153
Antigüedad: 15 años, 5 meses
Puntos: 0
Gracias por la respuesta, y vivan los arrays.
__________________
Hazlo o no lo hagas, pero nunca lo intentes

www.clubfronteniselche.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:07.