可以循环遍历字母。令我惊讶的是,很少有人知道这一点。
for($col = 'R'; $col != 'AD'; $col++) {
echo $col.' ';
}
返回:R S T U V W X Y Z AA AB AC
请注意,你不能使用 $col < 'AD'。它只适用于 !=
在处理 Excel 列时非常方便。
(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);
}
?>
可以循环遍历字母。令我惊讶的是,很少有人知道这一点。
for($col = 'R'; $col != 'AD'; $col++) {
echo $col.' ';
}
返回:R S T U V W X Y Z AA AB AC
请注意,你不能使用 $col < 'AD'。它只适用于 !=
在处理 Excel 列时非常方便。
关于循环速度的那一点是,中间和最后一个表达式会在每次循环时都会执行。
因此,你应该尝试将所有不会改变的内容从循环中移除。
通常,你使用函数来检查循环的最大次数。就像这里一样
<?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 会发生改变(后增量)。