Foros del Web » Programando para Internet » PHP »

Problema con un bucle foreach

Estas en el tema de Problema con un bucle foreach en el foro de PHP en Foros del Web. Hola amigos, el siguiente código no me funciona bien; solo entra en las condiciones "if" o "elseif" la primera vez , el resto se va ...
  #1 (permalink)  
Antiguo 10/07/2009, 10:37
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Problema con un bucle foreach

Hola amigos, el siguiente código no me funciona bien; solo entra en las condiciones "if" o "elseif" la primera vez, el resto se va al "else" aunque cumpla las concidiones. Os ilustro:

Código PHP:

$suplementos 
= array();
$acabados = array();
$opciones = array();

$parametros = array();
$parametros[0] = array("O""primero");
$parametros[1] = array("S""segundo");
$parametros[2] = array("S""tercero");
$parametros[3] = array("A""cuarto");

foreach(
$parametros as $input){
    
    
print_r($input);
    echo 
"<br>";

    if(
$input[0] == "S"){ 
        
$suplementos[] = $input;
        echo 
"Sup<br>";
        }
        
    elseif(
$input[0] == "A"){ 
        
$acabados[] = $input
        echo 
"Aca<br>"
        }
        
    elseif(
$input[0] == "O"){ 
        
$opciones[] = $input
        echo 
"Opt<br>"
        }
    
    else{
        
$error true;
        
$error_msg "Hay errores";
        
$n++;
        }
        
        
}

echo 
"<hr>Suplementos: ";
print_r($suplementos);
echo 
"<hr>Acabados: ";
print_r($acabados);
echo 
"<hr>Opciones: ";
print_r($opciones);
echo 
"<hr>Errores: ";
echo 
$error_msg". Ha entrado ".$n." veces."
La salida que me muestra es:

Cita:
Array ( [0] => O [1] => primero )
Opt
Array ( [0] => S [1] => segundo )
Array ( [0] => S [1] => tercero )
Array ( [0] => A [1] => cuarto )

--------------------------------------------------------------------------------
Suplementos: Array ( )
--------------------------------------------------------------------------------
Acabados: Array ( )
--------------------------------------------------------------------------------
Opciones: Array ( [0] => Array ( [0] => O [1] => primero ) )
--------------------------------------------------------------------------------
Errores: Hay errores. Ha entrado 3 veces.
Os animo a que probeis vosotros porque me resulta un error muy extraño.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #2 (permalink)  
Antiguo 10/07/2009, 10:40
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problema con un bucle foreach

Que extraño, lo he probado y obtengo el resultado esperado:

Cita:
Array ( [0] => O [1] => primero )
Opt
Array ( [0] => S [1] => segundo )
Sup
Array ( [0] => S [1] => tercero )
Sup
Array ( [0] => A [1] => cuarto )
Aca

--------------------------------------------------------------------------------
Suplementos: Array ( [0] => Array ( [0] => S [1] => segundo ) [1] => Array ( [0] => S [1] => tercero ) )
--------------------------------------------------------------------------------
Acabados: Array ( [0] => Array ( [0] => A [1] => cuarto ) )
--------------------------------------------------------------------------------
Opciones: Array ( [0] => Array ( [0] => O [1] => primero ) )
--------------------------------------------------------------------------------
Errores: . Ha entrado veces.
  #3 (permalink)  
Antiguo 10/07/2009, 10:41
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: Problema con un bucle foreach

En efecto, lo acabo de probar y me da la misma salida que a RonRuby..
  #4 (permalink)  
Antiguo 10/07/2009, 10:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema con un bucle foreach

A mí me funciona bien:
Cita:
Array ( [0] => O [1] => primero )
Opt
Array ( [0] => S [1] => segundo )
Sup
Array ( [0] => S [1] => tercero )
Sup
Array ( [0] => A [1] => cuarto )
Aca
Suplementos: Array ( [0] => Array ( [0] => S [1] => segundo ) [1] => Array ( [0] => S [1] => tercero ) ) Acabados: Array ( [0] => Array ( [0] => A [1] => cuarto ) ) Opciones: Array ( [0] => Array ( [0] => O [1] => primero ) ) Errores: . Ha entrado veces.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 10/07/2009, 10:52
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema con un bucle foreach

Esto es super curioso.

Efectivamente, si lo pruebo con el codigo exáctamente como os lo he puesto a vosotros funciona como bien habeis comprobado. Sin embargo, la variable $parametros viene de un bucle que hace explodes:

Código PHP:
$texto $_POST["texto"];

$lineas nl2br($texto);
$lineas explode("<br />",$lineas);


foreach(
$lineas as $linea){
    
    
$parametros2[] = explode(":",$linea);

}

$parametros = array(); 
$parametros[0] = array("O""primero"); 
$parametros[1] = array("S""segundo"); 
$parametros[2] = array("S""tercero"); 
$parametros[3] = array("A""cuarto");

echo 
$texto."<hr>";
print_r($parametros2);
echo 
"<hr>";
print_r($parametros);
echo 
"<hr>"
Y la salida:

Cita:
O:primero S:segundo S:tercero A:cuarto
--------------------------------------------------------------------------------
Array ( [0] => Array ( [0] => O [1] => primero ) [1] => Array ( [0] => S [1] => segundo ) [2] => Array ( [0] => S [1] => tercero ) [3] => Array ( [0] => A [1] => cuarto ) )
--------------------------------------------------------------------------------
Array ( [0] => Array ( [0] => O [1] => primero ) [1] => Array ( [0] => S [1] => segundo ) [2] => Array ( [0] => S [1] => tercero ) [3] => Array ( [0] => A [1] => cuarto ) )
--------------------------------------------------------------------------------
Pero funciona con $parametros pero no con $parametros2. Es curioso... voy a seguir con ello, tengo que estar cerca
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #6 (permalink)  
Antiguo 10/07/2009, 11:00
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema con un bucle foreach

Valeee acabo de encontrar el problema: en el caso de "$parametros2", el string cero lleva un salto de linea que no se ve, pero sí se ve en el codigo fuente así:

Cita:
//Parametros2
Array
(
[0] => Array
(
[0] => O
[1] => primero
)

[1] => Array
(
[0] =>
S
[1] => segundo
)

[2] => Array
(
[0] =>
S
[1] => tercero
)

[3] => Array
(
[0] =>
A
[1] => cuarto
)

)
<hr>
//Parametros
Array
(
[0] => Array
(
[0] => O
[1] => primero
)

[1] => Array
(
[0] => S
[1] => segundo
)

[2] => Array
(
[0] => S
[1] => tercero
)

[3] => Array
(
[0] => A
[1] => cuarto
)

)
Toda la tarde perdida tios...
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
  #7 (permalink)  
Antiguo 10/07/2009, 14:23
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: Problema con un bucle foreach

Usa trim() sobre la variable para eliminar los saltos de linea Te recomiendo usar var_dump() ya que con esa funcion ves mas datos, como la longitud de la variable.

Saludos.
  #8 (permalink)  
Antiguo 10/07/2009, 14:53
Avatar de hvpareja  
Fecha de Ingreso: marzo-2007
Ubicación: En Vélez Málaga (Málaga)
Mensajes: 213
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Problema con un bucle foreach

Muchas gracias por todo... no sé cómo hubiera visto el error sin participar en el foro.

Abrazos, hasta otra.
__________________
El mejor maestro es el eterno aprendiz.
http://hvpareja.wordpress.com/
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 22:16.