Foros del Web » Programando para Internet » PHP »

while pregunta

Estas en el tema de while pregunta en el foro de PHP en Foros del Web. bueno amigos me gustaría que me saquen de una duda tengo un bucle de la siguiente manera @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $newarray = ...
  #1 (permalink)  
Antiguo 07/02/2011, 09:24
Avatar de yense  
Fecha de Ingreso: febrero-2008
Ubicación: Perú Lima
Mensajes: 340
Antigüedad: 16 años, 2 meses
Puntos: 3
Pregunta while pregunta

bueno amigos me gustaría que me saquen de una duda

tengo un bucle de la siguiente manera

Código PHP:
Ver original
  1. $newarray = array();
  2. for($i = 0; $i < 17; $i++){
  3.     $newarray[$i] = "carro en la posicion ".$i;
  4. }

después los muestro en una tabla pero condicionándolos con un switch


Código PHP:
Ver original
  1. foreach( $newarray as $a => $b ){  
  2.     switch($a){
  3.         case $a <= 4;
  4.             $fila1 = $fila1."<td>".$b."</td>";     
  5.         break;
  6.         case $a <= 8;
  7.             $fila2 = $fila2."<td>".$b."</td>";
  8.         break;
  9.         case $a <= 12;
  10.             $fila3 = $fila3."<td>".$b."</td>";
  11.         break;
  12.         case $a <= 16;
  13.             $fila4 = $fila4."<td>".$b."</td>";
  14.         break;
  15.     }
  16. }
  17. echo "<table>";
  18. echo "<tr>".$fila1."</tr>";
  19. echo "<tr>".$fila2."</tr>";
  20. echo "<tr>".$fila3."</tr>";
  21. echo "<tr>".$fila4."</tr>";
  22. echo "</table>";


pero siempre me muestra esta modelo en html


Código HTML:
Ver original
  1. carro en la posicion 1  carro en la posicion 2  carro en la posicion 3  carro en la posicion 4
  2. carro en la posicion 5  carro en la posicion 6  carro en la posicion 7  carro en la posicion 8
  3. carro en la posicion 9  carro en la posicion 10 carro en la posicion 11 carro en la posicion 12
  4. carro en la posicion 13 carro en la posicion 14 carro en la posicion 15 carro en la posicion 16

mi pregunta es la siguiente que paso con la posicion 0
__________________
©® -> Conocer algo mas es dar un paso mas <- ®©
  #2 (permalink)  
Antiguo 07/02/2011, 18:24
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: while pregunta

Que te devuelve var_dump($newarray); ? aparece ahi la posicion cero?

Aparte de esto, parece haber un error de logica, ya que tienes 17 elementos (desde cero hasta 16) y solo muestras 16 en tu tabla, de manera que el primero o el ultimo no apareceran en ese listado.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 07/02/2011, 18:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: while pregunta

El problema está en los case, con esas comparaciones dejas fuera el primer item. Si haces un echo de $b, seguro aparece dentro del foreach.

Creo que dije lo mismo que Triby, pero de otra forma XD
  #4 (permalink)  
Antiguo 07/02/2011, 18:52
Avatar de jonasanx  
Fecha de Ingreso: enero-2011
Ubicación: La Via Lactea, Mexico, Mexico, Mexico
Mensajes: 134
Antigüedad: 13 años, 3 meses
Puntos: 4
Respuesta: while pregunta

Pues yo estoy un poco intrigado, espero que encuentren una respuesta, lo he probado de esta manera, y el cero no aparece en el primer case.
Código PHP:
Ver original
  1. <?php
  2. $newarray = array();
  3. for($i = 0; $i < 17; $i++){
  4.     $newarray[$i] = "carro en la posicion ".$i;
  5. }
  6.  
  7. foreach( $newarray as $a => $b ){
  8.  var_export($a);
  9.   switch($a){
  10.         case $a <= 4;
  11.             var_export($a);
  12.             $fila1 = $fila1."<td>".$b."</td>";
  13.         break;
  14.         case $a <= 8;
  15.             $fila2 = $fila2."<td>".$b."</td>";
  16.         break;
  17.         case $a <= 12;
  18.             $fila3 = $fila3."<td>".$b."</td>";
  19.         break;
  20.         case $a <= 16;
  21.             $fila4 = $fila4."<td>".$b."</td>";
  22.         break;
  23.     }
  24. }
  25. $a = 0;
  26. var_export($a <= 4);
  27. ?>
  #5 (permalink)  
Antiguo 07/02/2011, 19:33
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: while pregunta

La variable de indice ($a), aumenta antes de entrar al switch. Bastante raro la verdad. Pareciera que se compila primero la terminación del foreach en cada paso y luego el switch o algo así.
  #6 (permalink)  
Antiguo 07/02/2011, 19:34
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: while pregunta

No es capricho y tiene su lógica, cuando $a vale 0 todos los case's evaluan a true, 0 == true ? yo creo que no , no hay case que coincida por eso no te lo muestra.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 07/02/2011, 19:39
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: while pregunta

Cita:
Iniciado por masterpuppet Ver Mensaje
No es capricho y tiene su lógica, cuando $a vale 0 todos los case's evaluan a true, 0 == true ? yo creo que no , no hay case que coincida por eso no te lo muestra.

Saludos.
Si bien es cierto esto, en el primer case, 0 <= 4? debería ser TRUE, o se me pasa algo?
  #8 (permalink)  
Antiguo 07/02/2011, 19:45
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: while pregunta

Así no trabaja el switch walterdevel, primero evalua la condición y luego compara, se da esto:

Código PHP:
Ver original
  1. switch(0)
  2.   case true
  3.   case true

entonces a la hora de comprar 0 == true
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 07/02/2011, 19:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: while pregunta

Prueba hacer switch(true) y luego haz las comparaciones de $a
  #10 (permalink)  
Antiguo 07/02/2011, 19:54
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: while pregunta

Perfecto! Gracias a ambos!

Etiquetas: Ninguno
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 21:11.