2012-04-22 20 views
5

que necesito para obtener un número aleatorio que se encuentra entre¿Cómo elegir 1 número aleatorio de 2 rangos de números diferentes?

0 - 80 

y

120 - 200 

que puedo hacer

$n1 = rand(0, 80); 
$n2 = rand(120, 200); 

Pero entonces que elegir entre n1 y n2. No se puede hacer

$n3 = rand($n1, $n2) 

ya que esto me dé un número entre 80 - 120 la que tengo que evitar.

¿Cómo resolver esto?

+0

En el comienzo de su pregunta, se especifica el rango de '1-80', pero el Código refleja un rango de' 0-80'. ¿Qué quisiste decir? – Sonic42

+0

lo siento - lo solucionó – pepe

Respuesta

8

Desde ambos rangos tienen diferentes tamaños (aunque sólo sea por el número 1), para asegurar la buena distribución aleatoria, es necesario hacer esto:

$random = rand(0, 200 - 39); 
if ($random>=120-39) $random+=39; 

El método más rápido. :)

La forma en que esto funciona es pretendiendo que es un rango único, y si termina seleccionando un número por encima del primer rango, lo aumentamos para que quepa dentro del segundo rango. Esto asegura una dispersión perfecta.

+0

Él arregló la pregunta, ambos tienen el mismo rango de 81 (0-80 y 120-200) – Ozzy

+0

Ah, es fácil de arreglar. :) – DanRedux

+0

Las llamadas acordadas 2 al azar son más lentas que una, pero su implementación hace que sea mucho más difícil para un segundo programador seguir el código y el beneficio probablemente sea solo de 50-100 ms. Lo cual no supera el costo para mí: P – Ozzy

5

Como ambos rangos tienen el mismo tamaño, simplemente puede usar rand(0, 1) para determinar qué rango usar.

$n = rand(0, 1) ? rand(0, 80) : rand(120, 200); 
+0

¡Buena solución! Perfectamente correcto. – Chris

+0

No es correcto. Escogerá 0 a veces. :) – DanRedux

+0

@ThiefMaster y lo que quiere decir con 'ya que ambos rangos tienen el mismo tamaño' es que las probabilidades de un número en cualquiera de los dos rangos que se eligen son las mismas porque es 50%/rango-tamaño ¿no? – Ozzy

1

PHP tiene una nueva función para este rango llamado también. Muy fácil de usar, y puede ubicarse en el Manual de PHP.

Le permite ingresar un número mínimo/máximo para tomar un rango de.

<?php 
echo range(0, 1000); 
? 

Aunque técnicamente, también puede introducir sus propios dos números para servir como el rango de números.

1

obtener dos números aleatorios $ n1 y $ n2

$n1 = rand(0, 80); 
$n2 = rand(120, 200);

definir una nueva matriz llamada $ n3

$n3=array();

añadir $ n1 y $ n2 en matriz $ n3 empleo Función

array_push($n3,$n1,$n2);

uso array_rand() array_push() para encontrar el índice al azar $ find_index de la matriz $ n3.

$find_index=array_rand($n3,1);

muestran el resultado

echo $n3[$find_index];
Cuestiones relacionadas