Foros del Web » Programando para Internet » PHP »

Alcance de variables dentro de un foreach

Estas en el tema de Alcance de variables dentro de un foreach en el foro de PHP en Foros del Web. Me he dado cuenta muchas veces de que dentro de un foreach a veces (no se si siempre) pierdo el acceso a variables definidas fuera ...
  #1 (permalink)  
Antiguo 10/01/2007, 04:57
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Alcance de variables dentro de un foreach

Me he dado cuenta muchas veces de que dentro de un foreach a veces (no se si siempre) pierdo el acceso a variables definidas fuera de éste.

por ejemplo:
Código PHP:
$coches = array(1,2,3,4,5,6,7);
$motos = array("a","b","c","d","e");

foreach(
$coches as $coche)
{  
//codigo cualquiera

     
foreach($motos as $moto)  //<===Aqui tengo el problema
     
{
     }

Creo recordar que son en casos así cuando tengo problemas.
Php no me devuelve ningun error (repito, creo recordar), pero el segundo foreach no se ejectua ya que no encuentra la variable $motos, o si la encuentra, la encuentra vacia i no se ejecuta el código que comprende.

Con lo cual me veo obligado a cambiar el primer foreach por un tipico for($i=0;$i<count($coches);$i++).
No creo que haya ninguna solución a esta manera de trabajar de php, pero quisiera que alguien me aclarara el tema.
Gracias!
  #2 (permalink)  
Antiguo 10/01/2007, 09:37
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Alcance de variables dentro de un foreach

No entiendo porque dices que no se ejecuta el segundo bucle... te debería de funcionar; lo más probable es que no coloques bien tu secuencia de comandos dentro del bucle y es por eso que no se ejecuta. Tal vez con un ejemplo te quede más claro:
Código PHP:
<?php
$coches 
= array(1,2,3,4,5,6,7); 
$motos = array("a","b","c","d","e"); 

foreach(
$coches as $coche
{
   
//echo $coche.":";

   
foreach($motos as $moto)
   {
      echo 
$coche.":";
      echo 
$moto." ";
   }

   echo 
"<br/>";
}  
?>
Insisto, es sólo un ejemplo para que te des cuenta de que si se ejecuta el segundo bucle. Espero sea lo que necesitabas o por lo menos te de una idea. Suerte

PD. Si no te sirve de mucho el ejemplo pon el código que tienes hecho para que los dos estemos en la misma sintonía y se te pueda ayudar de una manera más eficiente. Chau
  #3 (permalink)  
Antiguo 15/01/2007, 04:46
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Alcance de variables dentro de un foreach

Bueno pues ahora mismo no recuerdo donde tengo exactamente el caso que describo, cuando lo recuerde ya subire el post con el ejemplo.

Otra cosa que me ronda por la cabeza sobre el foreach, es el porque los cambios que realizo dentro de un foreach sobre un array no permanecen al salir de éste?

Ejemplo:

$coches=array(1,2,3,4,5,6);
foreach($coches as $coche)
{ $coche = 'hola';
}

Si imprimo $coches al acabar se imprime 1,2,3,4,5,6
  #4 (permalink)  
Antiguo 15/01/2007, 05:49
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Re: Alcance de variables dentro de un foreach

Eso es debido a que la variable $coche es una copia del valor del array $coches. Para tener una referencia de la variables, hay que añadir & delante de $coche. Más informacion en la documentacion oficial del foreach.
Aquí un ejemplo:
Código PHP:
$coches=array(1,2,3,4,5,6);
foreach(
$coches as &$coche)
$coche 'hola';

Si no recuerdo mal, esto no funciona con versiones 'antiguas' del php. Si no te funciona, prueba a hacerlo con un for normal.

Un saludo
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 19:48.