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 != 0 || $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!