Foros del Web » Programando para Internet » PHP »

Presentar 5 datos aleatorios de un array

Estas en el tema de Presentar 5 datos aleatorios de un array en el foro de PHP en Foros del Web. Espero que este tema sea aquí, si no perdón. Tengo un array asociativo obtenido de un select. Código: ... $resultado = $tienda -> query ($consulta); ...
  #1 (permalink)  
Antiguo 14/07/2009, 13:48
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Presentar 5 datos aleatorios de un array

Espero que este tema sea aquí, si no perdón.

Tengo un array asociativo obtenido de un select.

Código:
... $resultado = $tienda -> query ($consulta);
$filas = $resultado-> num_rows;

for ($i=0; $i< $filas; $i++){
$array = $resultado -> fetch_assoc();  

echo $array['nombre'].'<br>';
Hasta aquí todo se imprime bien, pero se imprimen todos los datos.

Yo sólo quiero que me imprima 5 aleatorios pero con shuffle no me va, algo falla.

Código:
$resultado = $tienda -> query ($consulta);
$filas = $resultado-> num_rows;

for ($i=0; $i< $filas; $i++){
$array = $resultado -> fetch_assoc();  

shuffle ($array);
}
for ($i=0;  $i<5; $i++){
echo $array['nombre'].'<br>';
} 
El problema creo que es que me convierte un array asociativo en enumerado o escalar.
¿Alguien me puede orientar un poco, por favor?

Gracias.
Caminantejm.
  #2 (permalink)  
Antiguo 14/07/2009, 14:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Presentar 5 datos aleatorios de un array

Verfica sobre array_rand()
  #3 (permalink)  
Antiguo 14/07/2009, 14:34
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Presentar 5 datos aleatorios de un array

Pero necesitas imprimir un campo especifico, o el campo es aleatorio tambien?
  #4 (permalink)  
Antiguo 14/07/2009, 15:05
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Cita:
Iniciado por rusinho Ver Mensaje
Pero necesitas imprimir un campo especifico, o el campo es aleatorio tambien?
No. Lo que es aleatorio es los elementos que se muestran cada vez que se abre la página, ¿vale?

Gracias por la ayuda.
Caminantejm.
  #5 (permalink)  
Antiguo 14/07/2009, 15:19
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Presentar 5 datos aleatorios de un array

Bueno, siendo asi.

El array con todos los datos seria: $resultado, asi que seria utilizar array_rand, algo asi:

Código PHP:
$cincofilas=array_rand($resultado5);
for ..... 
Haces el array_rand y luego recorres el nuevo array.

Espero te sirva.
  #6 (permalink)  
Antiguo 14/07/2009, 15:34
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Pues lamento comentar que no me va rusinho.
Código PHP:
...$array $resultado -> fetch_assoc();  
}
$cincofilas=array_rand($array5); 
for (
$i=0$i<5$i++)  {
echo 
$i ."<br>";

He probado de varias maneras y no hay forma.
Gracias de todos modos.
Caminantejm.
  #7 (permalink)  
Antiguo 14/07/2009, 15:37
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Presentar 5 datos aleatorios de un array

podrias dar un

echo "<pre>";
print_r($array);
echo "</pre>";

Es para ver que trae el array
  #8 (permalink)  
Antiguo 14/07/2009, 15:46
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Cita:
Iniciado por abimaelrc Ver Mensaje
podrias dar un

echo "<pre>";
print_r($array);
echo "</pre>";

Es para ver que trae el array
Cuando imprimo
Código PHP:
for ($i=0$i$filas$i++){
$array $resultado -> fetch_assoc();  
echo 
$array['nombre']."<br>"
me da los elementos correspondientes a lo que le pido en el echo, es decir, el nombre.

Si imprimo
Código PHP:
echo "<pre>";
print_r($array);
echo 
"</pre>"
Me da las claves (es decir los campos de la base de datos) con el valor de un elemento.

Saludos y gracias de nuevo.
Caminantejm.
  #9 (permalink)  
Antiguo 14/07/2009, 15:56
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Presentar 5 datos aleatorios de un array

Con que S.G.B.D. trabajas?
  #10 (permalink)  
Antiguo 14/07/2009, 16:03
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Cita:
Iniciado por rusinho Ver Mensaje
Con que S.G.B.D. trabajas?
Con phpMyAdmin

Saludos.
  #11 (permalink)  
Antiguo 14/07/2009, 16:14
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Presentar 5 datos aleatorios de un array

Cita:
Iniciado por Caminantejm Ver Mensaje
Con phpMyAdmin

Saludos.
Umm mysql, bueno te planteo una posible solucion:

Primero tienes que verificar que el numero de filas por lo menos sea cinco, porque si no, no aplica.

Luego de eso colocas el siguiente codigo, mas o menos asi:

Código PHP:
  $resultado $tienda -> query ($consulta);
  
$filas $resultado-> num_rows;
  
$i=0;
  while (
$i<5){
    
$x=intval(rand(1$filas));
    
$pos=array_search($x$indicesfilas);
    if (
$pos==false){
      
$indicesfilas[$i]=$x;
      
$i++;
    }
  } 
Con el codigo anterior genera los cinco indices de las filas que vas a mostrar:

Luego recorres el resultado y muestras solo las que esten con los indices a mostrar

Código PHP:
  for ($i=1$i<=$filas$i++){
    
$array $resultado -> fetch_assoc();  
    if (
array_search($i$indicesfilas)!=false){
      echo 
$array['nombre'].'<br>';
    }
  } 
Espero te funcione.
  #12 (permalink)  
Antiguo 14/07/2009, 16:48
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Cita:
Iniciado por rusinho Ver Mensaje
Espero te funcione.
¡Está casi bien!
Me da fallo y dice que "Warning: array_search() [function.array-search]: Wrong datatype for second argument in"
Código PHP:
    $pos=array_search ($x$indicesfilas); 
Además, sólo me muestra 4 pero no es problema porque pongo 6 y ya está. De todos modos me da igual 5, 6 ó 7.

Gracias rusinho.
Caminantejm
  #13 (permalink)  
Antiguo 14/07/2009, 16:52
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Presentar 5 datos aleatorios de un array

Perdon, creo que asi si funciona, la verdad es que aca no tengo los servicios instalados para probarlo.

Código PHP:
  $resultado $tienda -> query ($consulta);
  
$filas $resultado-> num_rows;
  
$i=0;
  
$indicesfilas=array(0,0,0,0,0);
  while (
$i<5){
    
$x=intval(rand(1$filas));
    
$pos=array_search($x$indicesfilas);
    if (
$pos==false){
      
$indicesfilas[$i]=$x;
      
$i++;
    }
  } 
Con el codigo anterior genera los cinco indices de las filas que vas a mostrar:

Luego recorres el resultado y muestras solo las que esten con los indices a mostrar

Código PHP:
  for ($i=1$i<=$filas$i++){
    
$array $resultado -> fetch_assoc();  
    if (
array_search($i$indicesfilas)!=false){
      echo 
$array['nombre'].'<br>';
    }
  } 
Espero te funcione.
  #14 (permalink)  
Antiguo 14/07/2009, 17:03
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

¡Estupendo! Gracias rusinho.
Funciona muy bien. Además, he probado a poner un cero en
Código:
$indicesfilas=array(0);
y sale bien. Cambio el 5 a 6 y no da problemas.
El siguiente paso será entenderlo pero no te molesto más. He intentado estudiarlo desde que lo pusiste pero no termino de verlo.

Gracias y muy amable, rusinho.
Caminantejm.
  #15 (permalink)  
Antiguo 14/07/2009, 17:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Presentar 5 datos aleatorios de un array

Jaja, ok amigo, fue un gusto poder ayudarte.
  #16 (permalink)  
Antiguo 14/07/2009, 17:13
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Presentar 5 datos aleatorios de un array

Creo que así es más sencillo

Código PHP:
$resultado $tienda -> query ($consulta);
$filas $resultado-> num_rows;

for (
$i=0$i$filas$i++){
$array $resultado -> fetch_assoc();  

//Extraemos los campos en un array distintos y los desordenamos
$ary_campos =  array_keys($array);
 
shuffle($ary_campos);
}

foreach(
$ary_campos as $campo)
{
    echo 
$campo." => ".$array[$campo]."<br/>";

__________________
Revolucionario controlador de plantillas para php
www.simphple.com

Última edición por Tokkara; 14/07/2009 a las 17:30 Razón: corregido un pequeño fallo en el código
  #17 (permalink)  
Antiguo 14/07/2009, 17:15
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Presentar 5 datos aleatorios de un array

Cita:
Iniciado por Tokkara Ver Mensaje
Creo que así es más sencillo

Código PHP:
$resultado $tienda -> query ($consulta);
$filas $resultado-> num_rows;

for (
$i=0$i$filas$i++){
$array $resultado -> fetch_assoc();  

//Extraemos los campos en un array distintos y los desordenamos
$ary_campos shuffle(array_keys($array));

foreach(
$ary_campos as $campo)
{
    echo 
$campo." => ".$array[$campo]."<br/>";

No creo porque lo que se busca es que las filas sean aleatorias no las columnas o campos.

Saludos.!!
  #18 (permalink)  
Antiguo 14/07/2009, 17:35
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Efectivamente, tiene razón rusinho porque ya me ha pasado. Me salía un jaleo que no había ni por dónde leerlo. Desordenaba todo y lo mezclaba aleatoriamente. Lo que necesito es mostrar aleatoriamente las filas completas.

Saludos gracias de todos modos.
Caminantejm.
  #19 (permalink)  
Antiguo 14/07/2009, 17:48
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

Pues tengo que pedir disculpas porque efectivamente, no me quedaba tranquilo y he probado lo de Tokkara y también funciona. Siento haberme precipitado en la afirmación. En realidad me muestra el campo nombre pero resulta que es el que más me interesa. Los otros campos son más bien internos. Bueno, guardo los dos códigos.
Además, el de rusinho creo que permite llevarme el identificador.
Pongo este post nuevo para que os llegue la confirmación.

Saludos.
Caminantejm.

Última edición por Caminantejm; 14/07/2009 a las 17:54
  #20 (permalink)  
Antiguo 14/07/2009, 17:52
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Presentar 5 datos aleatorios de un array

Ah.. ok, no había entendido el problema inicial. Ahora creo que sí.
Cita:
Iniciado por rusinho
Código PHP:
$resultado $tienda -> query ($consulta);
  
$filas $resultado-> num_rows;
  
$i=0;
  
$indicesfilas=array(0,0,0,0,0);
  while (
$i<5){
    
$x=intval(rand(1$filas));
    
$pos=array_search($x$indicesfilas);
    if (
$pos==false){
      
$indicesfilas[$i]=$x;
      
$i++;
    }
  } 
Te recomiendo que uses este otro. Este puede llegar a bloquearse o relentizarse si en vez de 5 es otro número más grande y cercano a la variable $filas.

Código PHP:
  $resultado $tienda -> query ($consulta);
  
$filas $resultado-> num_rows;
  
$indicefilas range(0$filas-1);
  
shuffle($indicefilas);
  
$indice_filas =  array_slice($indice_filas0,  5); //Sustituye el valor de 5 por el que quieras 
Espero que ahora si te sirva de ayuda.
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #21 (permalink)  
Antiguo 14/07/2009, 18:05
 
Fecha de Ingreso: julio-2009
Mensajes: 75
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Presentar 5 datos aleatorios de un array

El problema es que ahora no me aclaro para recorrer el array e imprimirlo. No me sale.
Saludos.
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 06:06.