Foros del Web » Programando para Internet » PHP »

Doble while en array?

Estas en el tema de Doble while en array? en el foro de PHP en Foros del Web. Hola a todos. Quisiera ver si me podrías ayudar con esto. Tengo un array en php donde los datos los trae de mysql @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 05/06/2014, 17:56
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 17 años, 10 meses
Puntos: 10
Doble while en array?

Hola a todos.
Quisiera ver si me podrías ayudar con esto.
Tengo un array en php donde los datos los trae de mysql

Código PHP:
Ver original
  1. while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
  2.     printf ('<div class="time-select__group group--first">
  3.                    
  4.                      <div class="col-sm-4">
  5.                      
  6.                      
  7.                                <p class="time-select__place">campo %s</p>
  8.                                
  9.                        </div>
  10.                        <ul class="col-sm-8 items-wrap">
  11.                        <li class="time-select__item" ><a href="pagina.php?c=%s">%s</a></li>
  12.                                                        
  13.                        </ul>
  14.                    </div>
  15.    
  16.     ', $fila["campo"], $fila["codigo"], $fila["nombre"]);
  17. }

La cuestión es que en la base de datos "$fila["codigo"], $fila["nombre"]" tienen varios registros pero obviamente solo toma el primero que encuentra.

La idea es que
Código HTML:
Ver original
  1. <li class="time-select__item" ><a href="pagina.php?c=%s">%s</a></li>
se repita mostrando todos los demás registros.
Pero no he encontrado forma.
alguna forma?
Gracias de ante mano.
__________________
@ivancamiloGo
  #2 (permalink)  
Antiguo 05/06/2014, 18:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Doble while en array?

No necesitas más ciclos while ni otros arrays, lo que buscas es paginar los registros; aquí mismo en el foro hay muchos aportes y temas al respecto, usa el buscador del foro y seguro encontrarás algo útil.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/06/2014, 09:32
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 17 años, 10 meses
Puntos: 10
No,no.
No necesito paginar. Lo que necesito es que el array me muestre todas las consultas y no la primera que obtiene.
  #4 (permalink)  
Antiguo 06/06/2014, 09:53
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: Doble while en array?

Supongamos que tienes un array con esta estructura (por lo que comentaste creo que es parecido al tuyo):

Código PHP:
Ver original
  1. $array = array(
  2.     'campo' => array('ca1', 'ca2',  'ca3'),
  3.     'codigo' => array('co1', 'co2',  'co3'),
  4.     'nombre' => array('no1', 'no2',  'no3')
  5. );

Puedes hacer un bucle que procese el primer array y otro (dentro del bucle) que procese los del siguiente nivel:

Código PHP:
Ver original
  1. $texto = null;
  2.  
  3. foreach($array as $tit => $arr) {
  4.     $lista = null;
  5.     $texto .= '<h3>'. $tit .'</h3>';
  6.     $texto .= '<ul>';
  7.         foreach($arr as $a) {
  8.             $texto .= '<li>'. $a .'</li>';
  9.         }
  10.     $texto .= '</ul>';
  11. }
  12.  
  13. echo $texto;

El resultado será éste:

Código html:
Ver original
  1. <h3>campo</h3>
  2. <ul>
  3.     <li>ca1</li>
  4.     <li>ca2</li>
  5.     <li>ca3</li>
  6. </ul>
  7.  
  8. <h3>codigo</h3>
  9. <ul>
  10.     <li>co1</li>
  11.     <li>co2</li>
  12.     <li>co3</li>
  13. </ul>
  14.  
  15. <h3>nombre</h3>
  16. <ul>
  17.     <li>no1</li>
  18.     <li>no2</li>
  19.     <li>no3</li>
  20. </ul>
  #5 (permalink)  
Antiguo 06/06/2014, 17:45
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Doble while en array?

Y si muestras la consulta?... tal vez ahí es donde algo falla:

De hecho, ejecútala en PhpMyAdmin para ver cuántos registros obtienes y, si es más de uno, entonces habrá que ver todo tu PHP.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 07/06/2014, 12:54
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 17 años, 10 meses
Puntos: 10
Respuesta: Doble while en array?

Cita:
Iniciado por metacortex Ver Mensaje
Supongamos que tienes un array con esta estructura (por lo que comentaste creo que es parecido al tuyo):

Código PHP:
Ver original
  1. $array = array(
  2.     'campo' => array('ca1', 'ca2',  'ca3'),
  3.     'codigo' => array('co1', 'co2',  'co3'),
  4.     'nombre' => array('no1', 'no2',  'no3')
  5. );

Puedes hacer un bucle que procese el primer array y otro (dentro del bucle) que procese los del siguiente nivel:

Código PHP:
Ver original
  1. $texto = null;
  2.  
  3. foreach($array as $tit => $arr) {
  4.     $lista = null;
  5.     $texto .= '<h3>'. $tit .'</h3>';
  6.     $texto .= '<ul>';
  7.         foreach($arr as $a) {
  8.             $texto .= '<li>'. $a .'</li>';
  9.         }
  10.     $texto .= '</ul>';
  11. }
  12.  
  13. echo $texto;

El resultado será éste:

Código html:
Ver original
  1. <h3>campo</h3>
  2. <ul>
  3.     <li>ca1</li>
  4.     <li>ca2</li>
  5.     <li>ca3</li>
  6. </ul>
  7.  
  8. <h3>codigo</h3>
  9. <ul>
  10.     <li>co1</li>
  11.     <li>co2</li>
  12.     <li>co3</li>
  13. </ul>
  14.  
  15. <h3>nombre</h3>
  16. <ul>
  17.     <li>no1</li>
  18.     <li>no2</li>
  19.     <li>no3</li>
  20. </ul>
He arreglado un poco el código usando foreach y me ha funcionado, pero el problema que tengo ahora es que me está repitiendo la consulta por cada registro.



Este es el código

Código PHP:
Ver original
  1. $result_select = $querydb;
  2. $rows = array();
  3. while($row = mysql_fetch_array($result_select,MYSQL_ASSOC))
  4.     $rows[] = $row;
  5. foreach($rows as $row){
  6.     $datos = stripslashes($row['Dato']);
  7.     $asociTempo = ($row['temporada']);
  8.  
  9.    
  10.     // html
  11.     echo '<div class="time-select__group group--first">';
  12.     echo ' <div class="col-sm-4">';
  13.     echo ('<p class="time-select__place">Datos ' . $datos . '</p>');
  14.     echo '</div>';
  15.     echo ('<ul class="col-sm-8 items-wrap">');
  16.     foreach($rows as $row){
  17.     $code = stripcslashes($row['codigo']);
  18.     $epost = stripslashes($row['nombre']);
  19.     if ($row['temporada'] ==  $asociTempo) {
  20.     echo ('<li class="time-select__item"><a href="datos.php?c=' . $code . '">' . $epost .'</a></li>');
  21.     }
  22.     }
  23.    
  24.     echo '</ul>';
  25.     echo '</div>';
  26.  
  27. }
__________________
@ivancamiloGo
  #7 (permalink)  
Antiguo 08/06/2014, 10:41
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 17 años, 10 meses
Puntos: 10
Respuesta: Doble while en array?

La fila se repite porque obviamente está mostrando todos los registros de la tabla.

La tabla de mysql es la siguiente:

y los datos se distribuyen como en la imagen anterior.

Cómo podría hacer para que "Datos 1", "Datos 2", "Datos X" solo me los muestre una vez?
__________________
@ivancamiloGo
  #8 (permalink)  
Antiguo 08/06/2014, 13:35
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Doble while en array?

Buenas.
Haz probado a hacer un DISTINCT en el nombre del campo donde se almacenan dat1, dat2, datX. en tu consulta SQL ?.
No muestras la consulta que realizas, por lo que no estoy seguro, pero prueba colocando un DISTINCT.
Saludos.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #9 (permalink)  
Antiguo 08/06/2014, 19:56
Avatar de after  
Fecha de Ingreso: junio-2006
Ubicación: De marte
Mensajes: 791
Antigüedad: 17 años, 10 meses
Puntos: 10
Respuesta: Doble while en array?

Hola HackID1.
He probado haciendo así la consulta:
Código MySQL:
Ver original
  1. ("SELECT DISTINCT * FROM info WHERE codser = %s", GetSQLValueString($colname_query, "text"));

Pero me sigue mostrando igual.
__________________
@ivancamiloGo
  #10 (permalink)  
Antiguo 08/06/2014, 20:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Doble while en array?

Ordena la consulta por la categoría a la que pertenece cada dato (categoría padre) y luego:

Código PHP:
Ver original
  1. $actual = '';
  2. while(/* aquí lees la consulta */) {
  3.      if($actual != $row['categoria_padre']) {
  4.             /* Aquí muestras el padre (datos 1, datos 2, etc.) */
  5.             $actual = $row['categoria_padre'];
  6.      }
  7.      /* Aquí aparecerá cada hijo */
  8. }

Realmente no es tan difícil.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: doble, mysql, registro, select
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 10:05.