[关闭]
@Chiang 2020-01-13T15:24:41.000000Z 字数 1175 阅读 518

for

PHP-流程控制


for 循环是 PHP 中最复杂的循环结构。它的行为和 C 语言的相似。 for 循环的语法是:

  1. for (expr1; expr2; expr3)
  2. statement
  • expr1 在循环开始前无条件求值(并执行)一次
  • expr2每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。
  • expr3每次循环之后被求值(并执行)。
  • 每个表达式都可以为空或包括逗号分隔的多个表达式。
  • 表达式 expr2 中,所有用逗号分隔的表达式都会计算,但只取最后一个结果。
  • expr2 为空意味着将无限循环下去(和 C 一样,PHP 暗中认为其值为 TRUE)。这可能不像想象中那样没有用,因为经常会希望用有条件的 break 语句来结束循环而不是用 for 的表达式真值判断。

考虑以下的例子,它们都显示数字 1 到 10:

  1. <?php
  2. /* example 1 */
  3. for ($i = 1; $i <= 10; $i++) {
  4. echo $i;
  5. }
  6. /* example 2 */
  7. for ($i = 1; ; $i++) {
  8. if ($i > 10) {
  9. break;
  10. }
  11. echo $i;
  12. }
  13. /* example 3 */
  14. $i = 1;
  15. for (;;) {
  16. if ($i > 10) {
  17. break;
  18. }
  19. echo $i;
  20. $i++;
  21. }
  22. /* example 4 */
  23. for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
  24. ?>
  • 当然,第一个例子看上去最简洁(或者有人认为是第四个),但用户可能会发现在 for 循环中用空的表达式在很多场合下会很方便。

  • PHP 也支持用冒号的 for 循环的替代语法。

  1. for (expr1; expr2; expr3):
  2. statement;
  3. ...
  4. endfor;

有时经常需要像下面这样例子一样对数组进行遍历:

  1. <?php
  2. /*
  3. * 此数组将在遍历的过程中改变其中某些单元的值
  4. */
  5. $people = Array(
  6. Array('name' => 'Kalle', 'salt' => 856412),
  7. Array('name' => 'Pierre', 'salt' => 215863)
  8. );
  9. for($i = 0; $i < count($people); ++$i)
  10. {
  11. $people[$i]['salt'] = rand(000000, 999999);
  12. }
  13. ?>

以上代码可能执行很慢,因为每次循环时都要计算一遍数组的长度。由于数组的长度始终不变,可以用一个中间变量来储存数组长度以优化而不是不停调用 count():

  1. <?php
  2. $people = Array(
  3. Array('name' => 'Kalle', 'salt' => 856412),
  4. Array('name' => 'Pierre', 'salt' => 215863)
  5. );
  6. for($i = 0, $size = count($people); $i < $size; ++$i)
  7. {
  8. $people[$i]['salt'] = rand(000000, 999999);
  9. }
  10. ?>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注