(PHP 4, PHP 5, PHP 7, PHP 8)
Las bucles for
son las más complejas en PHP.
Funcionan como las bucles for
del lenguaje C(C++).
La sintaxis de las bucles for
es la siguiente :
for (expr1; expr2; expr3) comandos
La primera expresión (expr1) es evaluada (ejecutada), en cualquier caso al inicio de la bucle.
Al inicio de cada iteración, la expresión
expr2 es evaluada.
Si la evaluación es true
, la bucle
continúa y los comandos son ejecutados. Si
la evaluación es false
,
la ejecución de la bucle se detiene.
Al final de cada iteración, la expresión expr3 es evaluada (ejecutada).
Las expresiones pueden eventualmente ser
dejadas vacías o pueden 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 una bucle infinita
(PHP considera implícitamente que vale true
,
como en C). Esto no es realmente muy útil, a menos que se desee terminar la bucle con la
instrucción condicional
break
.
Considérese los siguientes ejemplos. Todos muestran los números enteros de 1 a 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++);
?>
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 una
bucle for
puede ser útil a veces.
PHP también soporta la siguiente sintaxis alternativa para las bucles
for
:
for (expr1; expr2; expr3): comandos ... endfor;
Muchas personas tienen la costumbre de iterar a través de arrays, como en el ejemplo a continuación.
<?php
/*
* Este es un array con datos que queremos modificar
* a lo largo de la bucle
*/
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < count($people); ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
Este código puede ser lento porque debe calcular el tamaño del array en cada iteración. Dado que el tamaño nunca cambia, puede ser fácilmente optimizado utilizando una variable intermedia para almacenar el tamaño en lugar de llamar repetidamente a la función count() :
<?php
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = count($people); $i < $size; ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>