Entero aleatorio con condiciones
Frecuentes
Visto 249 veces
5
Tengo un script PHP donde tengo una matriz de enteros, digamos $forbidden
.
Quiero obtener un número entero aleatorio de 1 a 400 que no está en $forbidden
.
Por supuesto, no quiero ningún bucle que se rompa cuando rand da un resultado funcional. Me gustaría algo más efectivo.
Cómo haces esto ?
2 Respuestas
10
Coloque todos los números prohibidos en una matriz y use array_diff
del range(1,400)
. Obtendrá una serie de números permitidos, elija uno al azar con array_rand()
.
<?php
$forbidden = array(2, 3, 6, 8);
$complete = range(1,10);
$allowed = array_diff($complete, $forbidden);
echo $allowed[array_rand($allowed)];
De esta manera, está eliminando los números excluidos del conjunto de selección y anulando la necesidad de un bucle :)
contestado el 03 de mayo de 12 a las 21:05
¡No sabía array_diff, lo estaba buscando por un tiempo! Gracias por la respuesta. - Cydonia7
0
Produce una matriz de los números permitidos. Encuentra el número en esta matriz. Seleccione uno de esos al azar.
contestado el 03 de mayo de 12 a las 21:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php random or haz tu propia pregunta.
¿Por qué el bucle no es efectivo? - Michael Robinson
@MichaelRobinson: No es efectivo porque $prohibido puede ser muy grande. Paul: Pensé en obtener todos los enteros posibles en una matriz y luego obtener una muestra, pero me preguntaba si hay algo mejor en el lenguaje: Cydonia7
@MichaelRobinson: El bucle es ineficaz porque, en teoría, puede acertar números prohibidos 1000000 veces seguidas (aunque si eso sucede, probablemente debería ir y completar algo de lotería), pero sí. - Madara's Ghost