Foros del Web » Programando para Internet » PHP »

Crear un numero aleatorio sin repetir los que ya han salido

Estas en el tema de Crear un numero aleatorio sin repetir los que ya han salido en el foro de PHP en Foros del Web. Buenas a todos, Estoy haciendo un programa en el que necesito que el rand(); me arroje un numero aleatorio de 1 a uno cualquiera, sin ...
  #1 (permalink)  
Antiguo 18/08/2008, 04:29
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 4 meses
Puntos: 2
Crear un numero aleatorio sin repetir los que ya han salido

Buenas a todos,

Estoy haciendo un programa en el que necesito que el rand(); me arroje un numero aleatorio de 1 a uno cualquiera, sin que cuando lo vuelva a usar me arroje un numero que ya me ha dado anteriormente.

Es decir si en un bucle primero me d un 3, luego al repetir el bucle ya no me puede mandar nunca mas un 3.

Lo mas corto que se me ha ocurrido es hacer un rand(); y luego pasarlo por un filtro con un if, en el que compruebo si ese numero ya esta en una cadena, si esta se repite y si no, pasa adelante y en la cadena se añade tal numero.

Asi es como lo hago:

Código PHP:
 for($i=1$i<=$as$i++) 
     {
      
$ale mt_rand(1,$mat);
      if( 
$ale == $mat )
      {
      
$mat $mat 1;
      }
      
$bus substr_count($ale_cad$ale);
      
          while ( 
$bus != || $h[$ale] == 0)
              {
              
$ale_cad $ale_cad.$ale;
              
$ale mt_rand(1,$mat);
              
              if( 
$ale == $mat )
                 {
                  
$mat $mat 1;
                  }
                 
               
$bus substr_count($ale_cad$ale);
              }
        
$mat $amat;
        
$ale_cad $ale_cad.$ale;
        
$h[$ale] = $h[$ale] - 1
Código:
Variables:

$mat - numero de materias totales que introducimos
$h[$] - id de la materia
$ale_cad - cadena que se va creando
$ale - aleatorio del 1 al $mat
$as - horas que tiene este dia

No se si es la correcta pero el caso es que con poca informacion, el programa me lo tira bien pero a la que lo cargo, se tira muchisimo rato procesando y se cuelga.

Espero que podais ayudarme,

Muchas gracias!
  #2 (permalink)  
Antiguo 18/08/2008, 04:42
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 16 años
Puntos: 3
Respuesta: Crear un numero aleatorio sin repetir los que ya han salido

Haz un random de un array con todos los valores, y una vez salgan los vas eliminando, de esta forma, evitas un bucle y mejora el rendimiento
__________________
Francesc Jimenez
  #3 (permalink)  
Antiguo 18/08/2008, 05:38
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 4 meses
Puntos: 2
Respuesta: Crear un numero aleatorio sin repetir los que ya han salido

Ufff... asi a bote pronto no se bien bien a que te refieres.

Podrias explicarme un poquito el sistema al que te refieres??

Muchas gracias por darme otra via de salida

Gracias
  #4 (permalink)  
Antiguo 18/08/2008, 07:37
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Crear un numero aleatorio sin repetir los que ya han salido

y porque no usas la funcion de PHP shuffle, mirate el primer ejemplo que ponen, y veras como es muy parecido a lo que quieres. Como han dicho por ahi arriba tambien puedes usar array_rand()

Seguro que te valen.
  #5 (permalink)  
Antiguo 18/08/2008, 16:31
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 4 meses
Puntos: 2
Respuesta: Crear un numero aleatorio sin repetir los que ya han salido

muchisimas gracias, probare las dos maneras y a ver cual da mejor resultado.

Gracias!!
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 07:49.