Ver índice
Bucles foreach

        Ocultar índice  

   Í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 AJAX


El 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 ) {
...instrucciones...
}

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>";
};
?>
ejemplo68.php

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 ) {
...instrucciones...
}

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 $pepa 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>";
};
?>
ejemplo69.php

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) {

          foreach($nuevo_array as $indice2 => $valor) {

                     .... $indice1 es el primer índice....
                     .... $indice2 es el segundo índice....
                     .... $nuevo_array nuevo array
                     ..... $valor es el valor
                    ....
           }
}

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>";
  };
};

?>
ejemplo70.php