Foros del Web » Programando para Internet » PHP »

Foreach y funcion count - Error

Estas en el tema de Foreach y funcion count - Error en el foro de PHP en Foros del Web. Saludos. Esta es una funcion que comprueba si se pasaron todos los datos de un formulario con el metodo post. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver ...
  #1 (permalink)  
Antiguo 16/07/2011, 19:45
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Foreach y funcion count - Error

Saludos. Esta es una funcion que comprueba si se pasaron todos los datos de un formulario con el metodo post.

Código PHP:
Ver original
  1. if (filled_out($_POST))
  2. //codigo a realizar
  3. .
  4. .
  5. .

Pero hay algo que no comprendo del "foreach" o del "condicional if". Y es que cuando cuando le mando un array vacio, $a=array(), con la funcion count obtengo que el numero de elementos es == 0. Pero cuando quiero controlar esa condicion en el IF, ($contador == 0), no me lo toma como verdadero.

Código PHP:
Ver original
  1. function filled_out($form_vars)
  2. {
  3.   // comprueba que cada variable tiene un valor
  4.   $contador = count($form_vars);
  5.   foreach ($form_vars as $key => $value)
  6.   {            
  7.      if (!isset($key) || ($key === "") || ($value === "") || ($contador == 0) )))
  8.           {
  9.              echo "falso";
  10.              return false;
  11.            }                           
  12.    }
  13.           echo "True";
  14.           return true;                         
  15. }
  16.  
  17. $a=array();
  18. echo"<br />";
  19. echo "tamaño: ".(count($a))."<br />"; //arroja 0
  20. echo filled_out($a); //arroja True

La opción que utilice para que funcione es poner el condicional IF, ($contador == 0), fuera del loop foreach y en ese caso si funciono. Pero alguien podria explicarme, por favor, porque sucede este comportamiento en el condicional IF dentro del loop FOREACH ?. Gracias.
  #2 (permalink)  
Antiguo 16/07/2011, 20:01
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Foreach y funcion count - Error

a simple vista veo que hay 2 parentesis de más acá


if (!isset($key) || ($key === "") || ($value === "") || ($contador == 0))) )

deberia se así:

if (!isset($key) || ($key === "") || ($value === "") || ($contador == 0) )


.
__________________
la la la
  #3 (permalink)  
Antiguo 16/07/2011, 20:16
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Foreach y funcion count - Error

Si, perdón, es que copie de mas el código. Ya le quite los parentesis de mas pero igual sigo obteniendo que ($contador == 0) es false cuando $a=array()
  #4 (permalink)  
Antiguo 16/07/2011, 21:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Foreach y funcion count - Error

El problema es que cuando haces el foreach() si la variable esta vacia, no va a entrar por el foreach, tendrías que hacer algo así:
Código PHP:
Ver original
  1. function foo($arr) {
  2.         if (count($arr) == 0) {
  3.                return false;
  4.         }
  5.  
  6.         foreach ($arr as $key => $value) {
  7.  
  8.         }
  9. }

Saludos.
  #5 (permalink)  
Antiguo 16/07/2011, 21:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Foreach y funcion count - Error

Haaaa, entonces si el array esta vacio foreach no hace el loop. No me di cuenta de eso viendo en el manual de php, deberían ponerlo como una note y no como una contribucion de un colaborador.

Muchas Gracias capo. Ya esta solucionado.
  #6 (permalink)  
Antiguo 16/07/2011, 22:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Foreach y funcion count - Error

¿Creo es un poco obvio no? El foreach es para iterar un arreglo, si el arreglo esta vacio pues no se va a iterar nada, es el comportamiento nativo de foreach en cualquier lenguaje, para que al menos se ejecute una vuelta del diclo existe el ciclo do/while.

Saludos.

Etiquetas: condicional, count, foreach, sizeof
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:09.