Contactos

Comando php foreach. Haz bucles while y foreach. Cambiar el puntero interno de una matriz durante la iteración

A menudo necesitas pasar por todos los elementos. Matriz PHP y realizar algún tipo de operación en cada elemento. Por ejemplo, puede enviar cada valor a Tabla HTML o darle a cada elemento un nuevo valor.

En esta lección, veremos la construcción foreach al recorrer en bucle 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 ($ array as $ value) (// Hacer algo con $ value) // 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? Al usar este tipo de matriz, a menudo necesita 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 finaliza 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 Lista HTML definiciones:

$ 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 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 la variable de valor en la construcción foreach:

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

Por ejemplo, el siguiente script 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"); // Cambie el formato de nombre para cada elemento para cada uno ($ directores como & $ director) (lista ($ nombre, $ apellido) = explotar ("", $ director); $ director = "$ apellido, $ nombre";) ($ 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 la construcción foreach de PHP para recorrer los elementos de una 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

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)

Un 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... A continuación, se utilizará el bucle foreach de PHP para recorrer 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 puede 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 funcionar con matrices.

Si está trabajando con MySQL, entonces para esto este ciclo encaja aún más. 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 $ elemento) (

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 ocurre 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 ($ bodega_inventario como $ 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 interruptor es algo similar a si: el resultado obtenido al evaluar 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 del comando de cambio es:

cambiar (expresión) (

caso (condición):

caso (condición):

La condición a comprobar se indica entre paréntesis después de la palabra clave switch. 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 una construcción de caso separada. 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 y visual del código. La variable especificada en la cláusula switch (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 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 el interruptor y los comandos 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. EN 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 una ruptura está anidada dentro de dos declaraciones while y el número 2 es posterior a la ruptura, 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.

Hacer bucles while y foreach

El bucle do. ... ... tiempo

El bucle do ... while en C #, es una versión posterior a la condición de while. Esto significa que la condición del bucle se comprueba después de que se ejecuta el cuerpo del bucle. Por lo tanto, los bucles do ... while son útiles en situaciones en las que un bloque de instrucciones debe ejecutarse al menos una vez. La siguiente es la forma general de la instrucción de bucle do-while:

hacer (declaraciones;) while (condición);

Si solo hay un operador, las llaves son opcionales en esta notación. Sin embargo, a menudo se utilizan para hacer que la construcción do-while sea más legible y no debe confundirse con la construcción de bucle while. El ciclo do-while se ejecuta siempre que la expresión condicional sea verdadera. Un ejemplo del uso del ciclo do-while es el siguiente programa que calcula el factorial de un número:

Usando el sistema; utilizando System.Collections.Generic; utilizando System.Linq; usando System.Text; espacio de nombres ConsoleApplication1 (class Program (static void Main (string args) (try (// Calcula el factorial de int i, result = 1, num = 1; Console.WriteLine ("Enter a number:"); i = int.Parse (Console .ReadLine ()); Console.Write ("\ n \ nFactorial (0) =", i); do (resultado * = num; num ++;) while (num

Para cada bucle

Para cada bucle sirve para el acceso cíclico a elementos de una colección, que es un grupo de objetos. C # define varios tipos de colecciones, cada una de las cuales es una matriz. La siguiente es la forma general de la instrucción de bucle foreach:

foreach (escriba loop_variable_name en la colección) operador;

Aquí escriba nombre_variable_ciclo denota el tipo y nombre de una variable de control de bucle que obtiene el valor del siguiente elemento de la colección en cada paso del bucle foreach. Y una colección denota una colección encuestada cíclicamente, que en lo sucesivo es una matriz. Por lo tanto, el tipo de variable de bucle debe coincidir con el tipo del elemento de la matriz. Además, el tipo se puede denotar palabra clave var. En este caso, el compilador determina el tipo de variable de bucle en función del tipo de elemento de la matriz. Esto puede resultar útil para tratar ciertos tipos de consultas. Pero, por regla general, el tipo se especifica explícitamente.

La declaración de bucle foreach funciona de la siguiente manera. Cuando comienza el ciclo, el primer elemento de la matriz se selecciona y se asigna a la variable del ciclo. En cada paso subsiguiente de la iteración, el siguiente elemento de la matriz se selecciona y se almacena en la variable de bucle. El ciclo termina cuando se seleccionan todos los elementos de la matriz.

El bucle foreach le permite recorrer cada elemento de la colección (un objeto que representa una lista de otros objetos). Formalmente, para que algo se considere una colección, debe admitir la interfaz IEnumerable. Los ejemplos de colecciones incluyen matrices de C #, clases de colección del espacio de nombres System.Collection y clases de colección personalizadas.



¿Te gustó el artículo? Compártelo