Programación en PHP, Javascript, Java, Python

Uso de Foreach y For (Parte II el Bucle Foreach) – PHP Tips

PHP Programming languageEn la primera entrada del Uso de Foreach y For hablaba sobre el uso del bucle for

Veamos primero la definición del constructor foreach en la documentación de PHP:

Constructor Foreach

El constructor foreach proporciona un modo sencillo de iterar sobre arrays. foreach funciona sólo sobre arrays y objetos, y emitirá un error al intentar usarlo con una variable de un tipo diferente de datos o una variable no inicializada. Existen dos sintaxis:

foreach (expresión_array as $valor)
    sentencias
foreach (expresión_array as $clave => $valor)
    sentencias

La primera forma recorre el array dado por expresión_array. En cada iteración, el valor del elemento actual se asigna a $valor y el puntero interno del array avanza una posición (así en la próxima iteración se estará observando el siguiente elemento).

La segunda forma además asigna la clave del elemento actual a la variable $clave en cada iteración.

Recorrer Arrays

Tal como dice la definición foreach nos sirve para recorrer arrays de una manera sencilla, bastante mas sencilla que con el bucle for, ya que no necesitamos conocer la longitud del array para recorrerla y el array puede tener claves tanto numéricas como no numéricas.


$array = array('Uno'=>'Hola', 'Dos'=>'Mundo, 'Tres' => 'Hello');

// Mostramos todas los valores del array

foreach ($array as $var) {

echo $var.PHP_EOL;

}

// Mostramos todas las claves y los valores del array

foreach ($array as $key => $var) {

echo $key .  " " . $var . PHP_EOL;

}

Recorrer objetos

Otra de las características que tiene foreach es la posibilidad de iterar sobre objetos, es decir, podriamos mostrar por pantalla todas las propiedades de un objeto.


$coche = new stdClass();
$coche->color = 'rojo';
$coche->ruedas = '4';
$coche->puertas = '3';
$coche->combustible = 'gasolina';

foreach ($coche as $key => $var) {
echo $key. " " . $var .PHP_EOL;
}

¿Podemos modificar los valores del array/objeto usando el foreach?

La respuesta es si, aunque con matices. Cuando recorremos un array o un objeto con foreach no recorremos el objeto en si sino una copia de ese objeto la cual se destruye una vez finalizada la iteración. Para poder modificar los valores tenemos que pasar el valor por referencia


foreach ($coche as $key => &$var) {
$var = $var." modificado";
}

Aqui el bucle foreach nos recorrería el array/objeto $coche y modificaría sus valores añadiendo “modificado” al final de cada uno de ellos.

Referenciar $var sólo es posible si el array iterado puede ser referenciado (es decir, si es una variable). El siguiente código no funcionará:


foreach ( array(1, 2, 3) as &var) {

$var = $var * 2;

}

Es decir, el array/objeto tiene que estar definido fuera del foreach para que pueda ser referenciado.

Utilizar arrays anidados con list PHP >= 5.5.0

Una de las novedades de la versión 5.5.0 de PHP es la posibilidad de recorrer un array de arrays y utilizar el array interior en las variables del bucle proporcionando list() como el valor.

// Este codigo solo funciona con PHP >= 5.5.0
$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as list($a, $b)) {
// $a contiene el primer elemento del array interior,
// y $b contiene el segundo elemento.
echo "A: $a; B: $b\n";
}
/* Mostrara
A: 1; B: 2
A: 3; B: 4
*/

http://es1.php.net/manual/es/control-structures.foreach.php

Enhanced by Zemanta
Anuncios

2 comentarios en “Uso de Foreach y For (Parte II el Bucle Foreach) – PHP Tips”

  1. Tengo una pregunta, si requiero hacer comparación entre objetos del array, digamos el objeto en la posición 2 con la posición 1, no me permite rea izarla a razón de lo siguiente “foreach ya no utiliza el puntero interno al array.”??? esto es lo q sale en la documentación, lo cual me parece una estupidez quitarle una funcionalidad indispensable, q evita hacer un foreach anidado

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s