Características del for en PHP

php for

Compatibilidad PHP 4, PHP 5, PHP 7, PHP 8 +.

Los bucles for son el tipo más complejo de bucles en PHP, son similares a su contraparte C y tienen la siguiente forma:

for (exp1; exp2; exp3)
    statement

La expresión se ejecuta exp1 una vez incondicionalmente al comienzo del ciclo, y la expresión se ejecuta exp2 al comienzo de cada ciclo. Si el resultado es el mismo, el True ciclo continúa su trabajo y ejecuta las declaraciones incluidas en él. Si el resultado es el mismo, el False bucle deja de funcionar y la expresión se exp3 ejecuta al final de cada ciclo. Cualquiera de las tres expresiones se puede dejar en blanco, y se pueden usar varias expresiones separadas por comas.

Todas las expresiones contenidas en la expresión se ejecutan exp2 pero el resultado se toma solo de la última instrucción. Dejar la expresión en exp2 blanco hace que el ciclo se ejecute solo en infinito (PHP considera implícitamente que el valor es True, como en C). Esto puede no ser tan inútil como cree, ya que a veces es posible que desee detener el ciclo con una interrupción condicional en lugar de utilizar la validación del ciclo. Tenga en cuenta los siguientes ejemplos, que muestran los números del 1 al 10:

<?php
/* Ejemplo 1 */
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}
/* Ejemplo 2 */
for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}
/* Ejemplo 3 */
$i = 1;
for (; ; ) {
    if ($i > 10) {
        break;
    }
    echo $i;
    $i++;
}
/* Ejemplo 4*/
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>

Seguro que el primer ejemplo es el mejor (o quizás el cuarto), pero a menudo encontrará que dejar expresiones vacías en un bucle for no deja de ser beneficioso. PHP también admite la sintaxis alternativa para bucles for:

for (exp1; exp2; exp3):
    statement
    ...
endfor;

Es muy común usar bucles for para pasar a través de los elementos de una matriz, como muestra el siguiente ejemplo:

<? php 
/ * 
* Esta matriz incluye algunos de los datos que queremos modificar 
* al pasar por el ciclo iterativo. 
* / 
$people = array(
    array('name' => 'Ana', 'salt' => 856412),
    array('name' => 'Bell', 'salt' => 215863) );
for($i = 0; $i < count($people); ++$i) {
    $people[$i]['salt'] = mt_rand(000000, 999999);
} 
?>

El código anterior puede ser lento porque cuenta el número de elementos de la matriz en cada ciclo, y dado que el número de elementos es una constante, el ciclo iterativo se puede mejorar utilizando una variable intermedia en la que almacenamos el número de elementos al llamar a la función ()count en cada ciclo:

<?php
$people = array(
    array('name' => 'Ana', 'salt' => 856412),
    array('name' => 'Bell', 'salt' => 215863) );
for($i = 0, $size = count($people); $i < $size; ++$i) {
    $people[$i]['salt'] = mt_rand(000000, 999999);
}
?>