Menú
Está libre
registro
hogar  /  Firmware/ PHP foreach loop: dos formas de usarlo. Hacer bucles while y foreach matrices php foreach

Bucle PHP foreach: dos formas de usarlo. Hacer bucles while y foreach matrices php foreach

A menudo es necesario revisar todos los elementos de una matriz PHP y realizar algún tipo de operación en cada elemento. Por ejemplo, puede generar cada valor en una tabla HTML o puede asignar un nuevo valor a cada elemento.

V Esta lección veremos la construcción foreach cuando recorramos matrices indexadas y asociadas.

Bucle sobre los valores de los elementos

El caso de uso más simple para foreach es cuando se repiten valores en una matriz indexada. Sintaxis básica:

Foreach ($ matriz como $ valor) (// Hacer algo con $ valor) // Aquí el código se ejecuta después de que termina el ciclo

Por ejemplo, el siguiente guión recorre la lista de directores en una matriz indexada e imprime el nombre de cada uno:

$ directores = matriz ("Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); foreach ($ directores como $ director) (echo $ director. "
"; }

El código anterior dará como resultado:

Alfred Hitchcock Stanley Kubrick Martin Scorsese Fritz Lang

Recorrer claves y valores

¿Qué pasa con las matrices asociadas? Cuando se utilizan estos tipos de matrices, a menudo es necesario tener acceso a la clave de cada elemento, así como a su valor. La construcción foreach tiene una forma de realizar esta tarea:

Foreach ($ array as $ key => $ value) (// Hacer algo con $ key y / o $ value) // Aquí el código se ejecuta después de que termina el ciclo

Un ejemplo de organización de un bucle a través de una matriz asociada con información sobre películas, muestra la clave de cada elemento y su valor en la lista de definiciones HTML:

$ película = matriz ("título" => "Ventana trasera", "director" => "Alfred Hitchcock", "año" => 1954, "minutos" => 112); eco "

"; foreach ($ película como $ clave => $ valor) (echo"
$ clave:
"; eco"
$ valor
";) eco"
";

Este script se generará cuando se ejecute:

Título: Ventana trasera director: Alfred Hitchcock año: 1954 minutos: 112

Cambiar el valor de un elemento

Pero, ¿qué pasa con el cambio en el valor de un elemento durante el ciclo? Puedes probar un código como este:

Foreach ($ myArray como $ valor) ($ valor = 123;)

Sin embargo, si lo ejecuta para su ejecución, encontrará que los valores en la matriz no cambies... La razón es que foreach trabaja con una copia valores de matriz, no con el original. Esto deja intacta la matriz original.

Para cambiar los valores de una matriz, necesita Enlace en el valor. Para hacer esto, debe poner el signo & delante de valor variable en la construcción foreach:

Foreach ($ myArray como & $ valor) ($ valor = 123;)

Por ejemplo, el siguiente guión recorre cada elemento (nombre del director) en la matriz $ directores y usa Función PHP explode () y la construcción de la lista para intercambiar nombres y apellidos:

$ directores = matriz ("Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); // Cambiar el formato de nombre para cada elemento para cada elemento ($ directores como & $ director) (lista ($ nombre, $ apellido) = explotar ("", $ director); $ director = "$ apellido, $ nombre";) unset ($ director); // Imprime el resultado final para cada ($ directores como $ director) (echo $ director. "
"; }

El script dará como resultado:

Hitchcock, Alfred Kubrick, Stanley Scorsese, Martin Lang, Fritz

Tenga en cuenta que el script llama a la función unset () para eliminar la variable $ director después de que finaliza el primer ciclo. Esta es una buena práctica si planea usar la variable más adelante en el script en un contexto diferente.

Si no elimina el enlace, existe el riesgo de que se siga ejecutando el código de una referencia aleatoria al último elemento de la matriz ("Lang, Fritz"), si continúa utilizando la variable $ director, que dará lugar a consecuencias imprevistas!

Resumen

En este tutorial, vimos cómo usar Construcción PHP foreach para recorrer los elementos de la matriz. Se consideraron las siguientes cuestiones:

  • Cómo recorrer los elementos de una matriz
  • Cómo acceder a la clave y el valor de cada artículo
  • Cómo usar una referencia para cambiar valores mientras recorre el bucle

Imagine que tiene una matriz asociativa sobre la que desea iterar. PHP proporciona una manera fácil de usar cada elemento de una matriz a su vez usando la construcción Foreach.

En lenguaje sencillo, sonaría así:
"Para cada elemento de la matriz especificada, ejecute este código".

Si bien continuará hasta que se cumpla alguna condición, el ciclo foreach continuará hasta que pase por cada elemento de la matriz.

PHP Foreach: Ejemplo

Contamos con una matriz asociativa que almacena los nombres de las personas de nuestra empresa, así como su edad. Queremos saber la edad de cada empleado, por lo que usamos un bucle a través de cada elemento para imprimir el nombre y la edad de cada empleado.

$ employeeAges; $ employeeAges ["Lisa"] = "28"; $ employeeAges ["Jack"] = "16"; $ employeeAges ["Ryan"] = "35"; $ employeeAges ["Rachel"] = "46"; $ employeeAges ["Grace"] = "34"; foreach ($ employeeAges as $ key => $ value) (echo "Nombre: $ clave, Edad: $ valor
"; }

Obtenemos el resultado:

Nombre: Lisa, Edad: 28 Nombre: Jack, Edad: 16 Nombre: Ryan, Edad: 35 Nombre: Rachel, Edad: 46 Nombre: Grace, Edad: 34

Bueno, el resultado es bueno y comprensible, pero la sintaxis de la construcción foreach no es muy fácil y comprensible. Echemos un vistazo más de cerca.

Para cada sintaxis: $ algo como $ clave => $ valor

Toda esta locura se traduce aproximadamente en: “Para cada elemento de la matriz asociativa $ employeeAges, quiero hacer referencia a $ key y su valor, es decir, $ value.

El operador "=>" representa una relación entre una clave y un valor. En nuestro ejemplo, los nombramos como clave - $ clave y valor - $ valor. Sin embargo, sería más fácil pensar en ellos como nombre y edad. En nuestro ejemplo a continuación, lo haremos, y tenga en cuenta que el resultado será el mismo, porque solo cambiamos los nombres de las variables que hacen referencia a claves y valores.

$ employeeAges; $ employeeAges ["Lisa"] = "28"; $ employeeAges ["Jack"] = "16"; $ employeeAges ["Ryan"] = "35"; $ employeeAges ["Rachel"] = "46"; $ employeeAges ["Grace"] = "34"; foreach ($ employeeAges as $ name => $ age) (echo "Nombre: $ nombre, Edad: $ edad
"; }

Bueno, el resultado, repetimos, es el mismo.

El bucle foreach de PHP se puede utilizar así:

foreach ($ array_name as $ value) (// código a ejecutar)

foreach ($ array_name as $ key => $ value) (// // código a ejecutar)

Ejemplo de uso de un bucle foreach con una matriz numérica

En este ejemplo, crearemos una matriz de cinco elementos con valores numéricos. El bucle foreach de PHP se utilizará para iterar a través de esta matriz. Dentro del bucle foreach, usamos echo para imprimir los valores de la matriz:

Ver demostración y código

Ejemplo con claves y valores de matriz

Este ejemplo describe otra forma de utilizar el bucle foreach de PHP. Para ello, hemos creado una matriz asociativa de tres elementos. Incluye los nombres de los empleados ( como llaves) y la cantidad salarios (como valores):

Ver demostración y código

Un ejemplo de cómo cambiar el valor de un elemento de matriz en un bucle foreach

También puedes c usando PHP array foreach puede cambiar los valores de los elementos de la matriz. Para hacer esto, use "&" antes de "$" para el valor de la variable. Por ejemplo:

& $ valor_de_elemento

El valor cambiará. Para hacerlo más claro, considere el siguiente ejemplo.

En este ejemplo, hemos creado una matriz numérica de cinco elementos. Después de eso, usamos un bucle foreach para mostrar los valores de los elementos.

Luego creamos otro bucle foreach donde "&" se agrega antes de $ value_of_element. Dentro de las llaves, asignamos nuevos valores a los elementos de la matriz.

Para ver la diferencia antes y después de asignar nuevos valores, la matriz se muestra usando la función print_r ().

Ver demostración y código

¿Para qué se utiliza el bucle foreach de PHP?

El bucle foreach de PHP se utiliza para trabajar con una matriz. Repite cada uno de sus elementos.

También puede utilizar un bucle for para trabajar con matrices. Por ejemplo, usar la propiedad length para obtener la longitud de una matriz y luego aplicarla como operador max. Pero foreach lo hace más fácil porque está diseñado para trabajar con matrices.

Si está trabajando con MySQL, este ciclo es aún más adecuado para esto. Por ejemplo, puede seleccionar varias filas de una tabla de base de datos y pasarlas a una matriz. Después de eso, usando un bucle foreach, iterar sobre todos los elementos de la matriz y realizar alguna acción.

Tenga en cuenta que puede usar un bucle foreach con una matriz o solo un objeto.

Usando un bucle foreach

Hay dos formas de utilizar PHP foreach loop en PHP. Ambos se describen a continuación.

  • La sintaxis del primer método de uso es:

foreach ($ array_name como $ valor) (echo $ valor)

En este caso, debe especificar el nombre de la matriz y luego la variable $ valor.

Para cada iteración, el valor del elemento actual se asigna a la variable $ value. Una vez completada la iteración, a la variable se le asigna el valor del siguiente elemento. Y así sucesivamente hasta que se enumeren todos los elementos de la matriz.

  • La sintaxis del segundo método ( PHP foreach como valor clave):

Esto es adecuado para matrices asociativas que utilizan pares clave / valor.

Durante cada iteración, el valor del elemento actual se asignará a la variable $ value_of_element. Además, la clave del elemento se asigna a la variable $ key_of_element.

Si está trabajando con matrices numéricas, puede utilizar el primer método, que no requiere claves de elementos.

Esta publicación es una traducción del artículo " PHP foreach loop 2 formas de usarlo"Preparado por el amable equipo del proyecto

La construcción foreach es un sabor de for incluido en el lenguaje para facilitar la iteración sobre los elementos de una matriz. Hay dos variantes del comando foreach para diferentes tipos matrices:

foreach (matriz como $ elemento) (

foreach (matriz como $ clave => $ elemento) (

Por ejemplo, al ejecutar el siguiente fragmento:

$ menu = аrrау ("pasta", "bistec", "patatas", "pescado", "patatas fritas");

foreach ($ menú como $ artículo) (

imprimir "$ elemento
";

se mostrará la siguiente salida:

En este ejemplo, deben tenerse en cuenta dos cosas. Primero, la construcción foreach regresa automáticamente al comienzo de la matriz (esto no sucede en otras construcciones de bucle). En segundo lugar, no es necesario incrementar explícitamente el contador o pasar al siguiente elemento de la matriz; esto sucede automáticamente con cada iteración de foreach.

La segunda opción se utiliza cuando se trabaja con matrices asociativas:

$ bodega_inventario = matriz (

"merlot" => 15,

"zinfandel" => 17,

"sauvignon" => 32

foreach ($ inventario_vino as $ i => $ recuento_elemento) (

imprimir "$ item_count botellas de $ i restantes
";

En este caso, el resultado se ve así:

Quedan 15 botellas de merlot

Quedan 17 botellas de zinfandel

Quedan 32 botellas de sauvignon

Como puede ver en los ejemplos anteriores, la construcción foreach facilita mucho el trabajo con matrices.

El principio de funcionamiento de la construcción del conmutador es algo similar a si: el resultado obtenido de la evaluación de una expresión se compara con una lista de posibles coincidencias.

Esto es especialmente útil cuando se verifican varios valores, ya que el uso de switch hace que el programa sea más descriptivo y compacto. El formato general para un comando de cambio es:

cambiar (expresión) (

caso (condición):

caso (condición):

La condición marcada se indica entre paréntesis después palabra clave cambiar. El resultado de su cálculo se compara secuencialmente con las condiciones en las secciones del caso. Si se encuentra una coincidencia, se ejecuta el bloque de la sección correspondiente. Si no se encuentra ninguna coincidencia, se ejecuta el bloque de sección predeterminado opcional.

Como verá en los siguientes capítulos, uno de los puntos fuertes de PHP es el manejo de la entrada del usuario. Digamos que el programa muestra una lista desplegable con varias opciones y cada línea de la lista corresponde a algún comando ejecutado en diseño separado caso. Es muy conveniente construir la implementación usando el comando switch:

$ user_input = "recetas"; // Comando seleccionado por el usuario

cambiar ($ user_input):

case ("buscar"):

imprimir "¡Realicemos una búsqueda!";

case ("diccionario"):

imprimir "¿Qué palabra le gustaría buscar?";

caso ("recetas"):

imprimir "Aquí hay una lista de recetas ...";

imprimir "Aquí está el menú ...";

Como puede ver en el fragmento anterior, el comando de cambio proporciona una organización clara e intuitiva del código. La variable especificada en la cláusula de cambio (en este ejemplo, $ user_input) se compara con las condiciones de todas las secciones de casos posteriores. Si el valor especificado en la sección de caso coincide con el valor de la variable que se compara, se ejecuta el bloque de esta sección. La instrucción break evita que se verifiquen más secciones de casos y finaliza la ejecución de la instrucción switch. Si no se cumple ninguna de las condiciones marcadas, se invoca la sección predeterminada opcional. Si no hay una sección predeterminada y no se cumple ninguna de las condiciones, el comando de cambio simplemente finaliza y la ejecución del programa continúa con el siguiente comando.

Debe recordar que si no hay una instrucción de interrupción en la sección de caso (consulte la sección siguiente), la ejecución del cambio continúa con la siguiente instrucción hasta que se encuentra una instrucción de interrupción o se llega al final de una instrucción de cambio. El siguiente ejemplo demuestra las consecuencias de perder un comando de interrupción olvidado: $ valor = 0.4;

cambiar ($ valor):

print "el valor es 0.4
";

print "el valor es 0.6
";

print "el valor es 0.3
";

imprimir "¡No eligió un valor!";

El resultado se ve así:

La ausencia de un comando de interrupción resultó en que no solo se ejecutara el comando de impresión en la sección donde se encontró la coincidencia, sino también el comando de impresión en la siguiente sección. Luego, la ejecución de las instrucciones de cambio fue interrumpida por la instrucción de cambio que siguió a la segunda instrucción de impresión.

La elección entre los comandos switch y if no tiene prácticamente ningún efecto sobre el rendimiento del programa. La decisión de utilizar esta o aquella construcción es más bien un asunto personal del programador.

La instrucción break interrumpe inmediatamente la ejecución de la instrucción while, for o switch en la que se encuentra. Este comando ya se mencionó en la sección anterior, pero interrumpir el bucle actual no agota las capacidades del comando de interrupción. V vista general La sintaxis de ruptura se ve así:

El parámetro opcional n especifica el número de niveles de estructuras de control que terminará el comando de interrupción. Por ejemplo, si un comando de interrupción está anidado dentro de dos declaraciones while y el número 2 está después de la interrupción, ambos bucles se abandonan inmediatamente. El valor predeterminado para n es 1; ir a un nivel puede indicarse mediante una indicación explícita de 1, o mediante una indicación del comando de interrupción sin un parámetro. Tenga en cuenta que el comando i f no es una de las construcciones de control interrumpidas por el comando break.

For Each ... Next loop en VBA Excel, su sintaxis y descripción de los componentes individuales. Ejemplos de uso del bucle For Each ... Next.

El bucle For Each ... Next en VBA Excel está diseñado para ejecutar un bloque de declaraciones en relación con cada elemento de un grupo de elementos (rango, matriz, colección). Este maravilloso bucle se utiliza cuando se desconoce el número de elementos de un grupo y su indexación, de lo contrario, es preferible utilizarlo.

For Each ... Next Sintaxis del bucle

Para cada elemento En el grupo [declaraciones] [Salir para] [declaraciones] Siguiente [elemento]

Los corchetes indican los atributos opcionales del bucle For Each ... Next.

Para cada ... Siguiente bucle de componentes

*Si En bucle Cada ... Siguiente se usa en VBA Excel para atravesar los elementos de una colección (objeto Colección) o matriz, luego la variable elemento debe declararse con el tipo de datos Variante de lo contrario, el bucle no funcionará.

**Si no usa su código en el bucle, se pierde el significado de usar el bucle.

Para cada ... Siguiente bucle Ejemplos

Bucle para un rango de celdas

En la hoja activa de un libro de Excel, seleccione un rango de celdas y ejecute el siguiente procedimiento:

Sub test1 () Dim element As Range, a As String a = "Datos recuperados de For Each ... Siguiente:" Para cada elemento de la selección a = a & vbNewLine & "Cell" & element.Address & _ "contiene el valor: "& CStr (element.Value) Siguiente MsgBox a End Sub

La ventana de información de MsgBox mostrará las direcciones de las celdas seleccionadas y su contenido, si lo hubiera. Si se seleccionan muchas celdas, no se mostrará la información completa de todas las celdas, ya que la longitud máxima del parámetro Inmediato tiene aproximadamente 1024 caracteres.

Bucle para recogida de hojas

Copie lo siguiente Procedimiento VBA a libros de Excel:

Sub test2 () Dim element As Worksheet, a As String a = "Lista de hojas de trabajo contenidas en este libro:" Para cada elemento en Worksheets a = a & vbNewLine & element.Index _ & ")" & element.Name Next MsgBox a End Sub

La ventana de información MsgBox mostrará una lista de los nombres de todas las hojas del libro de Excel por el número ordinal de sus pestañas correspondientes a sus índices.

Bucle para una matriz

Asigne una lista de nombres de animales a la matriz y en el bucle For Each ... Next escríbalos en una variable a... La ventana de información MsgBox mostrará una lista de nombres de animales de una variable a.

Sub test3 () Dim element As Variant, a As String, group As Variant group = Array ("hipopótamo", "elefante", "canguro", "tigre", "ratón") "hoja, por ejemplo el seleccionado: grupo = Selección a = "La matriz contiene los siguientes valores:" & vbNewLine para cada elemento del grupo a = a & vbNewLine & element Next MsgBox a End Sub

Repitamos el mismo procedimiento de VBA, pero establezcamos todos los elementos de la matriz en el bucle For Each ... Next en Parrot. La ventana de información de MsgBox mostrará una lista de nombres de animales, que consta solo de loros, lo que demuestra la posibilidad de editar los valores de los elementos de la matriz en el bucle For Each ... Next.

Sub test4 () Dim element As Variant, a As String, group As Variant group = Array ("hipopótamo", "elefante", "canguro", "tigre", "ratón") "hoja, por ejemplo, la seleccionada: group = Selection a = "La matriz contiene los siguientes valores:" & vbNewLine Para cada elemento En el grupo element = "Parrot" a = a & vbNewLine & element Siguiente MsgBox a End Sub

Este código, como todo lo demás en este artículo, se probó en Excel 2016.

Bucle para recopilar subdirectorios y salir del bucle

En este ejemplo, agregaremos a la variable a nombres de subdirectorios en el disco C tu computadora. Cuando el ciclo llega a la carpeta Archivos de programa, se agregará a la variable a su nombre y mensaje: “¡Basta, no seguiré leyendo! Saludos, tu bucle For Each ... Next ".

Sub test5 () Dim FSO As Object, myFolders As Object, myFolder As Object, a As String "Cree un nuevo FileSystemObject y asígnelo a la variable" FSO "Set FSO = CreateObject (" Scripting.FileSystemObject ")" Extraiga la lista de subdirectorios en el disco "C" y asígnelo "a la variable" myFolders "Establezca myFolders = FSO.GetFolder (" C: \ ") a =" Carpetas en el disco C: "& vbNewLine" Recorra la lista de subdirectorios y agregue sus nombres a la variable "a" "después de llegar a la carpeta" Archivos de programa ", salga del bucle Para cada myFolder En myFolders.SubFolders a = a & vbNewLine & myFolder.Name Si myFolder.Name =" Program Files "Entonces a = a & vbNewLine & vbNewLine & "Suficiente, sigue leyendo, no lo haré!" _ & vbNewLine & vbNewLine & "Regards," & vbNewLine & _ "Your For Each ... Next loop." Salir para finalizar si el siguiente conjunto FSO = Nada MsgBox un End Sub

La ventana de información MsgBox mostrará una lista de los nombres de los subdirectorios en el disco C su computadora a la carpeta Archivos de programa inclusive y el mensaje del ciclo sobre la terminación de su labor.

Como resultado, el programa mostrará no solo los nombres de los subdirectorios visibles al navegar al disco en el explorador C, sino también carpetas ocultas y de servicio. Para ver una lista de todos los subdirectorios del disco C, comenta el fragmento de código de Si antes de Terminara si inclusive y ejecute el procedimiento en el editor de Excel de VBA.