Entero aleatorio con condiciones

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 ?

preguntado el 03 de mayo de 12 a las 21:05

¿Por qué el bucle no es efectivo? -

@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:

@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í. -

2 Respuestas

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

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 or haz tu propia pregunta.