for
(PHP 4, PHP 5, PHP 7, PHP 8)
Los bucles for son los más complejos en PHP.
Funcionan como los bucles for del lenguaje C.
La sintaxis de los bucles for es la siguiente:
La primera expresión (expr1) es
evaluada (ejecutada) una sola vez, sin condición, al
inicio del bucle.
Al inicio de cada iteración, la expresión
expr2 es evaluada.
Si la evaluación es true, el bucle
continúa y los comandos son ejecutados. Si
la evaluación es false,
la ejecución del bucle se detiene.
Al final de cada iteración, la expresión
expr3 es evaluada
(ejecutada).
Cada una de las expresiones puede estar
vacía o puede contener varias expresiones separadas por comas.
En expr2, todas las expresiones separadas por una coma
son evaluadas pero el resultado se obtiene desde la última parte.
Si la expresión expr2
es dejada vacía, esto significa que es un bucle infinito
(PHP considera implícitamente que vale true,
como en C). Esto puede ser menos inútil de lo que parece, ya que a menudo se
desea terminar el bucle con una instrucción condicional
break
en lugar de usar la expresión de verdad del for.
Considérense los siguientes ejemplos. Todos muestran los números enteros de
1 a 10:
Por supuesto, el primer ejemplo es el más simple
de todos (o quizás el cuarto), pero también se puede pensar que usar una expresión vacía en un
bucle for puede ser útil a veces.
PHP también soporta la siguiente sintaxis alternativa para los bucles
for:
Las expresiones expr2 y expr3 se
evalúan en cada iteración. Es aconsejable usar expresiones simples en estos
lugares para evitar problemas de rendimiento. Por ejemplo, si el número de
iteraciones se conoce de antemano, es mejor usar una variable en lugar de una
llamada a función en expr2:
En el ejemplo anterior, la función se llama en cada iteración del primer
bucle, aunque siempre devuelve el mismo valor. Almacenar ese valor en una
variable, como hace el segundo bucle, llama a la función una sola vez. Tenga
en cuenta que el número de iteraciones queda entonces fijado: si el array se
modifica dentro del bucle, el valor almacenado ya no refleja su tamaño.
Nota:
El tamaño de un array se almacena junto con el array, lo que
significa que llamar a la función nativa count() no
requiere contar los elementos y no provoca problemas de rendimiento. Esto no
se aplica a COUNT_RECURSIVE, que recorre todo el array.
También hay que tener cuidado al usar count() sobre
objetos que implementan Countable, ya que
tales llamadas pueden ser más costosas.
Nota:
El bucle for no es la forma recomendada de iterar sobre
arrays. El bucle foreach está diseñado específicamente para este propósito
y suele ser más cómodo.