Ver Mensaje Individual
  #10 (permalink)  
Antiguo 23/11/2013, 20:17
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Número aleatorio pero evitando uno en particular

Como bien te han dicho, no hay forma de que coloques una excepción, al menos no dentro de una función primitiva de PHP, sin embargo, puedes emular ese accionar. Un pequeño ejemplo:

Código PHP:
Ver original
  1. <?php
  2. function loteria ($numero) {
  3.     $aleatorio = mt_rand(1, 49);
  4.     if (!in_array($aleatorio, $numero)) $numero[] = $aleatorio;
  5.     return count($numero) < 5 ? loteria($numero) : $numero;
  6. }
  7. echo "Numero de loteria: ";
  8. foreach (loteria(array()) as $valor) echo $valor . "\t";
  9. ?>

Utilizo un array el cual albergará a los 5 números aleatorios, para imprimir sus valores, puedo usar cualquiera de los ciclos existentes, en este caso, usaré el constructor Foreach. A éste, le debo de asignar un array, el cual se alimentará con la función loteria que es la que generará los 5 números aleatorios.

En dicha función, recibimos el array en la variable $numero, enseguida, generamos un número aleatorio entre el 1 y el 49 con la función mt_rand, que actúa como la función rand que usas, con la diferencia que ésta genera el número aleatorio 4 veces más rápido que la otra. Luego, con la función in_array, verificamos si el número aleatorio generado, se encuentra en el array, de no ser así, lo asignamos al array. El signo ! indica negación. Finalmente, si la cantidad de elementos en el array es menor a 5, volvemos a invocar a la función loteria, enviándole el array con los valores que contenga hasta ese momento, caso contrario, es decir, cuando ya tengamos los 5 números, retornamos el array a la primera llamada que se hizo dentro del constructor Foreach.

Ya teniendo el array completo, solamente procedemos a imprimir su contenido que son los 5 números aleatorios. La "\t", sirve como tabulador, para que entre los números, haya un espacio y no salgan todos juntos.

Saludos