Está en la página 1de 6

foreach

(PHP 4, PHP5) El constructor foreach proporcina un modo sencillo de iterar sobre arrays. foreach funciona slo 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 (expresin_array as $valor) sentencias foreach (expresin_array as $clave => $valor) sentencias

La primera forma recorre el array dado por expresin_array. En cada iteracin, el valor del elemento actual se asigna a $valor y el puntero interno del array avanza una posicin (as en la prxima iteracin se estar observando el siguiente elemento). La segunda forma adems asigna la clave del elemento actual a la variable $clave en cada iteracin. Tambin es posible personalizar la iteracin de objetos. Nota: Cuando foreach inicia su ejecucin, el puntero interno del array se pone automticamente en el primer elemento del array. Esto significa que no es necesario llamar la funcin reset() antes de un bucle foreach. Ya que foreach depende el puntero de array interno, cambiar ste dentro del bucle puede conducir a un comportamiento inesperado. Para poder modificar directamente los elementos del array dentro de bucle, se ha de anteponer & a $valor. En este caso el valor ser asignado por referencia.
<?php $array = array(1, 2, 3, 4); foreach ($array as &$valor) { $valor = $valor * 2; } // $array ahora es array(2, 4, 6, 8) unset($valor); // rompe la referencia con el ltimo elemento ?>

Referenciar $valor slo es posible si el array iterado puede ser referenciado (es decir, si es una variable). El siguiente cdigo no funcionar:

<?php foreach (array(1, 2, 3, 4) as &$valor) { $valor = $valor * 2; } ?>

Advertencia La referencia del $valor y el ltimo elemento del array permanecen an despus del bucleforeach. Se recomienda destruirlos con unset(). Nota: foreach no soporta la capacidad de suprimir mensajes de error usando '@'. Se puede haber notado que las siguientes construcciones son funcionalmente idnticas:
<?php $array = array("uno", "dos", "tres"); reset($array); while (list(, $valor) = each($array)) { echo "Valor: $valor<br />\n"; } foreach ($array as $valor) { echo "Valor: $valor<br />\n"; } ?>

Las siguientes construcciones tambin son funcionalmente idnticas:


<?php $array = array("uno", "dos", "tres"); reset($array); while (list($clave, $valor) = each($array)) { echo "Clave: $clave; Valor: $valor<br />\n"; } foreach ($array as $clave => $valor) { echo "Clave: $clave; Valor: $valor<br />\n"; } ?>

Algunos ejemplos ms para demostrar su uso:


<?php /* Ejemplo 1 de foreach: slo el valor */ $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Valor actual de \$a: $v.\n";

} /* Ejemplo 2 de foreach: valor (con su notacin de acceso manual impreso con fin es ilustrativos) */ $a = array(1, 2, 3, 17); $i = 0; /* slo para efectos ilustrativos */ foreach ($a as $v) { echo "\$a[$i] => $v.\n"; $i++; } /* Ejemplo 3 de foreach: clave y valor */ $a = array( "uno" => 1, "dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; } /* Ejemplo 4 de foreach: arrays multidimensionales */ $a = array(); $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } /* Ejemplo 5 de foreach: arrays dinmicos */ foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n"; } ?>

Mtodo foreach() para recorrer estructuras de tipo vector o tabla en PHP Para iterar sobre arrays (estructuras de datos de tipo tabla o vector) en PHP podemos usar la instruccin foreach Su uso es muy simple y nos permite recorrer estas estructuras de datos de una forma alternativa a la forma clsica de declarar una variable como contador e ir incrementndola a medida que recorremos los ndices. Existen dos tipos de sintaxis para la instruccin foreach:
foreach (array as $valor){ instruccion; } foreach (array as $clave => $valor){ instruccion; }

La primera se utiliza cuando solo nos interesa el contenido de una posicin concreta de vector. La segunda se usa si tambin deseamos usar el valor de $clave, por ejemplo si los ndices no son numricos.

Ejemplo funcional de foreach en PHP


$datos = array("69878754-E" "44580546-P" => "Marta"); => "Juli&aacute;n", "32684574-F" => "Paula",

foreach ($datos as $clave=>$valor) { echo "dni: $clave Nombre: $valor "; }

En este ejemplo tenemos un conjunto de personas en una tabla cuya identificacin es su DNI.

PHP tiene una estructura de control llamada foreach que nos permite recorrer un array de manera muy fcil. Su estructura es la siguiente: foreach (ARRAY as $valor) sentencia En este caso ARRAY es un array o bien una expresin que devuelve un array. Por cada posicin del array se ejecutar sentencia y en cada una de estas ejecuciones la varialbe $valor tendr como contenido el valor de la posicin actual del array. Otra forma que puede tomar foreach es la siguiente: foreach (ARRAY as $clave => $valor) sentencia En este caso lo que cambia es que no slo tendremos acceso a los valores de las posiciones del array sino tambin a los ndices (o claves en un array asociativo) que indexan al array. Veamos algunos ejemplos de los dos casos: $arr = array(1, 2, 3, 4); foreach ($arr as $val) { echo $val . "\n"; } // imprime: // 1 // 2 // 3 // 4 Y ahora usando la versin ampliada con indices: $arr = array(1, 2, 3, 4); foreach ($arr as $key => $val) { echo $key . ": " . $val . "\n"; } // imprime: // 0: 1 // 1: 2 // 2: 3 // 3: 4 Recordar que los ndices de los arrays comienzan en 0. Un ltimo ejemplo lo mostraremos con arrays asociativos (sus ndices son strings) $arr = array('rojo' => 1, 'verde' => 2, 'azul' => 3, 'marron' => 4); foreach ($arr as $key => $val) { echo $key . ": " . $val . "\n"; } // imprime:

// // // //

rojo: 1 verde: 2 azul: 3 marron:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< El bucle foreach nos permite iterar para cada elemento de un vector, su sintaxis es sencilla, solo hay que indicar el identificador de la matriz, la expresion as y seguidamente la variable que identificar el valor del elemento: 000 001 002 003 004 005 <? $vector = array("uno", "dos", "tres"); foreach ($vector as $valor) { echo "Valor: $valor<br>"; } ?>
Maximizar Seleccionar PHP

Esta expresin tambien nos permite trabajar con vectores con indice, en este caso trabajaremos as: 000 001 002 003 004 005 006 007 008 009 010 <? $vector = array( "uno" => 1, "dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach($vector as $indice => $valor) { print "\$vector[$indice] => $valor.\n"; } ?>

También podría gustarte