Foros del Web » Programación para mayores de 30 ;) » Programación General »

Array y random (PHP)

Estas en el tema de Array y random (PHP) en el foro de Programación General en Foros del Web. Hola amigos, Estoy haciendo un script, tengo unas dudas y os la voy a plantear mediante un ejemplo que resulte comprensible: Tengo una serie de ...
  #1 (permalink)  
Antiguo 06/07/2008, 15:23
 
Fecha de Ingreso: enero-2008
Mensajes: 36
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Array y random (PHP)

Hola amigos,

Estoy haciendo un script, tengo unas dudas y os la voy a plantear mediante un ejemplo que resulte comprensible:

Tengo una serie de marcas de coche en el array $marcas.
De todas estas marcas ha de salir finalmente SOLO una.
Para llegar a "la escogida" primero haremos unos descartes y si finalmente hay más de una, ésta la obtendremos al azar entre las que queden del descarte.

El criterio de descarte dependerá de los resultados obtenidos en una consulta a la base de datos, de manera que estos podran variar segun el usuario. Finalmente, el descarte lo realizaremos mediante condicionales.

Código:
$marcas = array();

if ($marcaprestigio = si) {
$marcas[1] = "ferrari";
$marcas[2] = "audi";
$marcas[3] = "porsche";
}
elseif ($marcabarata = si) {
$marcas[2] = "audi";
$marcas[4] = "seat";
$marcas[5] = "skoda";
}
elseif ($marcasegura = si) {
$marcas[2] = "audi";
$marcas[6] = "volvo";
$marcas[7] = "hummer";
}
else {}
Pongamos que hay un usuario que quiere un coche de prestigio, no quiere que sea barato y si quiere que sea seguro

Los componentes del array quedarian pues por orden:

Código:
$marcas[1] = "ferrari";
$marcas[2] = "audi";
$marcas[3] = "porsche";
$marcas[2] = "audi";
$marcas[6] = "volvo";
$marcas[7] = "hummer";
Tendriamos 6 valores, dos repetidos, de los cuales tendriamos que sacar uno al azar. No se muy bien como hacerlo. Tambien me gustaria que el "sorteo" fuese 1 elegido de 5 (sin contar el repetido) en lugar de 1 elegido de 6 (para no dar a audi más posibilidades)

Alguna idea

Gracias de antemano

Última edición por Olivier; 06/07/2008 a las 15:56
  #2 (permalink)  
Antiguo 06/07/2008, 15:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Array y random

Tema trasladado a Ingeniería del Software y Gestión de Proyectos.
  #3 (permalink)  
Antiguo 06/07/2008, 20:46
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Array y random (PHP)

Si no quieres tener en cuenta al repetido, te recomiendo que lo quites del array (pues tampoco tiene mucha onda mostrarle a tu usuario dos veces el mismo coche :P).

Para obtener uno al azar te diría que lo mas cómodo es que todos esten contíguos en el array (además tu forma de armar el array no me parece la mejor pero bueeeno, ese es ya tu problema), y con una sencilla cuenta como:

numeroRandom * cantidadElementosEnElArray

puedes obtener el índice de un auto elegido al azar. El numeroRandom lo puedes obtener de alguna librería dependiendo del lenguaje que estes utilizando, y la cantidad de elementos en el array espero que sepas calcularla o la conozcas :P.
__________________
Saludoss
Guille
  #4 (permalink)  
Antiguo 07/07/2008, 05:37
 
Fecha de Ingreso: enero-2008
Mensajes: 36
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Array y random (PHP)

Hola amigo,

Gracias por la respuesta. Ya he conseguido solucionarlo.

Sobre lo del array, no puedo quitar los repetidos porque pueden estar asignados a una u otra condición y tienen que aparecer sea de una manera o se de otra. Si se dan las dos y se repite pues ahí nace el problema.

Tampoco puedo numerarlos ya que hay items que en una condicion pueden no salir y por lo tanto como has visto en el ejemplo se me rompe la cadena. Si hago un random con numero y sale ese numero que no está en el array final pues no sirve de nada.

La solución la tiene la función array_rand(), me ha costado encontrarla a pesar de que tiene las 2 palabras clave de mi topic, ésta descarta los repetidos y escoje un valor del array al azar, vamos, parece que me la hayan hecho a medida.

Saludos y gracias a todos igualmente
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 14:21.