循环遍历字母是可能的。我很惊讶很少有人知道这一点。
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 才会自增(后增量)。