PHP Conference Kansai 2025

for

(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);
}
?>

add a note

User Contributed Notes 2 notes

up
315
matthiaz
13 years ago
Looping through letters is possible. I'm amazed at how few people know that.

for($col = 'R'; $col != 'AD'; $col++) {
echo $col.' ';
}

returns: R S T U V W X Y Z AA AB AC

Take note that you can't use $col < 'AD'. It only works with !=
Very convenient when working with excel columns.
up
70
nzamani at cyberworldz dot de
23 years ago
The point about the speed in loops is, that the middle and the last expression are executed EVERY time it loops.
So you should try to take everything that doesn't change out of the loop.
Often you use a function to check the maximum of times it should loop. Like here:

<?php
for ($i = 0; $i <= somewhat_calcMax(); $i++) {
somewhat_doSomethingWith($i);
}
?>

Faster would be:

<?php
$maxI
= somewhat_calcMax();
for (
$i = 0; $i <= $maxI; $i++) {
somewhat_doSomethingWith($i);
}
?>

And here a little trick:

<?php
$maxI
= somewhat_calcMax();
for (
$i = 0; $i <= $maxI; somewhat_doSomethingWith($i++)) ;
?>

The $i gets changed after the copy for the function (post-increment).
To Top