Foros del Web » Programando para Internet » PHP »

Evitar que un número generado por rand() se repita

Estas en el tema de Evitar que un número generado por rand() se repita en el foro de PHP en Foros del Web. Hola: function card_draw ($numeroDeobjetos) { for ($i=0; $i<$numeroDeobjetos; $i++) { $aleatorio=rand (1,40); $usada[$aleatorio]=true; } for ($i=0; $i<=39; $i++) { if ($usada[$i]==false) { echo '<img src="card.jpg">'; ...
  #1 (permalink)  
Antiguo 10/05/2011, 15:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
Evitar que un número generado por rand() se repita

Hola:

function card_draw ($numeroDeobjetos) {
for ($i=0; $i<$numeroDeobjetos; $i++) {
$aleatorio=rand (1,40);
$usada[$aleatorio]=true;
}

for ($i=0; $i<=39; $i++) {
if ($usada[$i]==false) {
echo '<img src="card.jpg">';
}
else {
echo '<img src="'.$i.'.jpg">';
}
}
}

El problema es que se repiten los números aleatorios que genera $aleatorio y no sé cómo podría resolverlo. ¿Alquien puede ayudarme?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 10/05/2011, 16:09
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Evitar que un número generado por rand() se repita

yo lo he hecho así:
1 coloco los números disponibles en un arreglo.
2 al azar obtengo un número entre 0 y el tamaño del arreglo.
3 saco ese numero del arreglo.
ejemplo:

Código PHP:
Ver original
  1. for($x=1;$x<=52;$++)
  2.     $arr[]=$x;//lleno el arreglo con numeros del 1 al 52
  3.  
  4. while($tam<count($arr)){//mientras el arreglo tenga numeros
  5.     $z=rand(0,$tam);//obtengo un numero al azar entre 0 y el tamaño del arreglo
  6.     $arr_des[]=$arr[$z];//coloco el numero en otro arreglo;
  7.     array_splice($arr,$z,1);//quito el numero del arreglo original.
  8. }
  #3 (permalink)  
Antiguo 10/05/2011, 16:13
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Evitar que un número generado por rand() se repita

ahi tienes numeros aleatorios que no se repiten

Código PHP:
<?php
$rand 
range(140);
shuffle($rand);
foreach (
$rand as $val) {
    echo 
$val '<br />';
}
saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 10/05/2011, 16:13
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
Respuesta: Evitar que un número generado por rand() se repita

Cita:
Iniciado por ocp001a Ver Mensaje
yo lo he hecho así:
1 coloco los números disponibles en un arreglo.
2 al azar obtengo un número entre 0 y el tamaño del arreglo.
3 saco ese numero del arreglo.
ejemplo:

Código PHP:
Ver original
  1. for($x=1;$x<=52;$++)
  2.     $arr[]=$x;//lleno el arreglo con numeros del 1 al 52
  3.  
  4. while($tam<count($arr)){//mientras el arreglo tenga numeros
  5.     $z=rand(0,$tam);//obtengo un numero al azar entre 0 y el tamaño del arreglo
  6.     $arr_des[]=$arr[$z];//coloco el numero en otro arreglo;
  7.     array_splice($arr,$z,1);//quito el numero del arreglo original.
  8. }
Muchas gracias por la respuesta, pero me veo incapaz de implementarlo en mi función.

Un saludo y gracias.
  #5 (permalink)  
Antiguo 10/05/2011, 16:23
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
Respuesta: Evitar que un número generado por rand() se repita

Cita:
Iniciado por Hidek1 Ver Mensaje
ahi tienes numeros aleatorios que no se repiten

Código PHP:
<?php
$rand 
range(140);
shuffle($rand);
foreach (
$rand as $val) {
    echo 
$val '<br />';
}
saludos.
El problema es que a la función se le pasa la variable $numeroDeObjetos y tiene que generar exactamente ese número de aleatorios. Así que no me veo capaz de implementarlo.

Un saludo y muchas gracias.
  #6 (permalink)  
Antiguo 10/05/2011, 16:34
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Evitar que un número generado por rand() se repita

pues si no eres capaz de implementar ninguna solución te recomiendo leas un manual de php.
ya que por lo que veo es bastante sencillo con los ejemplos que se te han entregado

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 10/05/2011, 16:45
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
Respuesta: Evitar que un número generado por rand() se repita

Cita:
Iniciado por Hidek1 Ver Mensaje
pues si no eres capaz de implementar ninguna solución te recomiendo leas un manual de php.
ya que por lo que veo es bastante sencillo con los ejemplos que se te han entregado

saludos.
Al final lo he implementado. Estaba aturdido de probar tantas cosas.

Un saludo y muchas gracias.
  #8 (permalink)  
Antiguo 10/05/2011, 18:02
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Evitar que un número generado por rand() se repita

Para complementar: Hace poco leí que mt_rand() era mejor que rand(). No lo sabía.

Cita:
La senténcia mt_rand es mejor por dos motivos: es bastante mas rápida que rand() y tiene un mejor algoritmo, digamos que los números seudo-aleatorios que genera son "más aleatorios" que los de rand().

http://www.nociondigital.com/webmast...etalle-99.html
  #9 (permalink)  
Antiguo 10/05/2011, 18:08
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Evitar que un número generado por rand() se repita

Metacortex, según leí por ahí, mt_rand() era más rápida que rand, pero esto fue hasta PHP 5.
De PHP5 se cambió el alrogitmo de rand() y ahora es mucho mejor que el mismo mt_rand..

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies

Etiquetas: rand
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:52.