# Statements: For

The `for` statement is typically used to step through a range of values in ascending or descending increments, performing some set of operations on each value. For example:

``````for (\$i = 1; \$i <= 5; ++\$i) {
echo "\$i\t".(\$i * \$i)."\n"; // output a table of squares
}

\$i = 1;
for (; \$i <= 5; ) {
echo "\$i\t".(\$i * \$i)."\n"; // output a table of squares
++\$i;
}

\$i = 1;
for (; ; ) {
if (\$i > 5)
break;
echo "\$i\t".(\$i * \$i)."\n"; // output a table of squares
++\$i;
}
``````
Output
``````1	1
2	4
3	9
4	16
5	25
1	1
2	4
3	9
4	16
5	25
1	1
2	4
3	9
4	16
5	25
``````

In the first `for` loop above, let's call `\$i = 1` the for-initializer, `\$i <= 10` the for-control, and `++\$i` the for-end-of-loop-action. Each of these three parts can contain a comma-separated list of expressions. For example:

``````for (\$i = 1, \$j = 10; f(\$i), \$i <= 10; \$i = \$i + 2, --\$j) {
...
}
``````

The group of expressions in for-initializer is evaluated once, left-to-right, for their side-effects only. Then the group of expressions in for-control is evaluated left-to-right (with all but the right-most one for their side-effects only), with the right-most expression's value being tested. If that tests `true`, the loop body is executed, and the group of expressions in for-end-of-loop-action is evaluated left-to-right, for their side-effects only. Then the process is repeated starting with for-control. If the right-most expression in for-control tests `false`, control transfers to the point immediately following the end of the for statement. The loop body is executed zero or more times.

The controlling expression—the right-most expression in for-control---must have type `bool` or be implicitly convertible to that type.

Any or all of the three parts of the first line of a for statement can be omitted, as shown. If for-initializer is omitted, no action is taken at the start of the loop processing. If for-control is omitted, this is treated as if for-control was an expression with the value `true`. If for-end-of-loop-action is omitted, no action is taken at the end of each iteration.