for

(PHP 4, PHP 5, PHP 7, PHP 8)

for 循环是 PHP 中最复杂的循环。它们的行为类似于 C 中的对应循环。 for 循环的语法如下:

for (expr1; expr2; expr3)
    statement

第一个表达式 (expr1) 在循环开始时无条件地执行一次。

在每次迭代开始时,都会评估 expr2。如果它评估为 **true**,则循环继续执行,并执行嵌套的语句。如果它评估为 **false**,则循环执行结束。

在每次迭代结束时,都会评估(执行)expr3

每个表达式都可以为空或包含多个用逗号分隔的表达式。在 expr2 中,所有用逗号分隔的表达式都会被评估,但结果只取自最后部分。如果 expr2 为空,则循环将无限次执行(PHP 隐式地将它视为 **true**,与 C 一样)。这可能不像你想象的那么没用,因为通常你希望使用条件 break 语句来结束循环,而不是使用 for 的真值表达式。

请考虑以下示例。它们都显示了 1 到 10 的数字

<?php
/* 示例 1 */

for ($i = 1; $i <= 10; $i++) {
echo
$i;
}

/* 示例 2 */

for ($i = 1; ; $i++) {
if (
$i > 10) {
break;
}
echo
$i;
}

/* 示例 3 */

$i = 1;
for (; ; ) {
if (
$i > 10) {
break;
}
echo
$i;
$i++;
}

/* 示例 4 */

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>

当然,第一个示例看起来是最简洁的(或者可能是第四个),但你可能会发现,在很多情况下,能够在 for 循环中使用空表达式会很方便。

PHP 还支持 for 循环的替代“冒号语法”。

for (expr1; expr2; expr3):
    statement
    ...
endfor;

许多用户习惯于像下面示例那样迭代数组。

<?php
/*
* 这是一个包含我们要在 for 循环中修改的数据的数组。
*
*/
$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);
}
?>

上面的代码可能很慢,因为数组大小在每次迭代时都会被获取。由于大小从未改变,因此可以使用中间变量来存储大小,而不是反复调用 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);
}
?>

添加备注

用户贡献的备注 2 备注

315
matthiaz
12 年前
可以循环遍历字母。令我惊讶的是,很少有人知道这一点。

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

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

请注意,你不能使用 $col < 'AD'。它只适用于 !=
在处理 Excel 列时非常方便。
70
nzamani at cyberworldz dot de
23 年前
关于循环速度的那一点是,中间和最后一个表达式会在每次循环时都会执行。
因此,你应该尝试将所有不会改变的内容从循环中移除。
通常,你使用函数来检查循环的最大次数。就像这里一样

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

更快的做法是

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

这里有一个小技巧

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

在函数复制后,$i 会发生改变(后增量)。
To Top