Índice de contenidos
Instalación en Windows
Instalación en Ubuntu
Servidores seguros
Páginas dinámicas
Sintaxis básica
Operaciones
Arrays
Formatos de presentación
Operadores
Bucles
Extraer y ord. información
Funciones
Ficheros externos
Imágenes dinámicas
Gestión de directorios
Cookies y sesiones
Clases y objetos
Ficheros en formato PDF
Bases de datos MySQL
PHP y XML
PDO - Bases SQLite / MySQL
MySQL a traves de misqli
Algo de JavaScript y AJAXEl bucle foreach
El bucle foreach es específico de los array y aplicable a ellos tanto si son escalares como si su tipo es asociativo. Tiene dos opciones uso. Mediante una de ellas lee únicamente los valores de los elementos del array. La segunda opción permite leer el índice y el valor de cada elemento.
Lectura de valores
Utilizando la sintaxis:
foreach ( array as $valor ) {donde array es el nombre del array (sin incluir índices ni corchetes), as es una palabra obligatoria y $valor el nombre de una variable (puede ser creada al escribir la instrucción ya que no requiere estar previamente definida) que irá recogiendo los valores de los sucesivoe elementos del array.
Las instrucciones escritas entre las { } permiten el tratamiento o visualización de los valores obtenidos. La variable $valor no podrá ser utilizada para guardar valores. Hemos de tener en cuenta que su valor se rescribe en cada iteración del bucle y que al acabar este sólo contendrá el último de los valores leídos.
<?php /* definimos un array escalar utilizando la sintaxis nombre del array=array (valores de los elemento separados por comas) si los valores son números no es necesario encerrarlos entre comillas */ $a=array("a","b","c","d","e"); /* definamos ahora un nuevo array, esta vez asociativo utilizando la sintaxis clave => valor tal como puedes ver */ $b=array( "uno" =>"Primer valor", "dos" =>"Segundo valor", "tres" =>"Tecer valor", ); # establecemos el bucle que leerá el array $a # recogiendo en la variable $pepe los valores extraídos # y escribimos los valores foreach($a as $pepe) { echo $pepe,"<br>"; }; # repetimos el mismo proceso, ahora con $b que es un array asociativo foreach($b as $pepe) { echo $pepe,"<br>"; }; ?>
Lectura de índices y valores
Con una sintaxis como la que sigue se pueden leer no sólo los valores de un array sino también sus índices.
foreach ( array as $indices => $valores ) {donde array es el nombre de la matriz, as es una palabra obligatoria, $indices es el nombre de la variable que recogerán los índices, los caracteres => (son obligatorios) son el separador entre ambas variables y, por último, $valores es el nombre de la variable que recoge el valor de cada uno de los elementos del array.
Tanto esta función como la anterior realizan una lectura secuencial que comienza en el primer valor del array.
<?php $a=array("a","b","c","d","e"); $b=array( "uno" =>"Primer valor", "dos" =>"Segundo valor", "tres" =>"Tecer valor", ); # en este caso extraeremos índices y valores de ambos arrays # usaremos $pepe para recoger los índices y $pepe para recoger los valores # y separaremos ambas variables por => que es el separador obligatorio # para estos casos foreach($a as $pepe=>$pepa) { echo "Indice: ",$pepe," Valor: ",$pepa,"<br>"; }; foreach($b as $pepe=>$pepa) { echo "Indice: ",$pepe," Valor: ",$pepa,"<br>"; }; ?>
Arrays bidimensionales
Cuando se trata de arrays bidimensionales la lectura de los valores que contienen sus elementos requiere el uso de dos bucles anidados. Cuando un array de este tipo es sometido al bucle foreach se extrae como índice el primero de los indices y como valor un array unidimensional que tiene como índice el segundo de los del array original y como valor el de aquel.
La lectura de los valores de cada elemento requiere utilizar un segundo bucle que extraiga la información del array unidimensional obtenido como valor en la primera lectura. La sintaxis sería de este tipo:
foreach ($array as $indice1=>$nuevo_array) {En el caso de arrays con dimensiones superiores sería necesario proceder del mismo modo, y habría que utilizar tantos bucles foreach como índices contuviera el array.
<?php # definamos un array bidimensional $z=array( 0 => array ( 0 => 34, 1 => 35, 2 => 36, ), 1 => array ( 0 => 134, 1 => 135, 2 => 136, ) ); # intentemos leer índices y valores mediante un bucle foreach # y veamos como los valores que extraemos son Arrays (unidimensionales) # consecuencia del caracter bidimensional del array original foreach($z as $pepe=>$pepa) { echo "Indice: ",$pepe," Valor: ",$pepa,"<br>"; }; /* anidemos dos bucles foreach de la siguiente forma en el primero extraemos un array que es tratado por el segundo foreach para extraer el segundo índice y el valor realmente contenido en ese elemento bidimensional */ foreach($z as $ind1=>$valor1) { foreach($valor1 as $ind2=>$valorReal) { echo "Ind. 1: ",$ind1,"Ind. 2: ",$ind2," Valor: ",$valorReal,"<br>"; }; }; ?>