PHP - for 循环



程序默认情况下按照语句的顺序执行。如果程序流程指向程序中任何较早的语句,则构成循环。PHP 中的 **for** 语句是构成 PHP 脚本中循环的便捷工具。在本章中,我们将讨论 PHP 的 for 语句。

"for" 循环流程图

下面的流程图解释了 **for** 循环的工作原理:

PHP For Loop

当你知道要执行语句或语句块多少次时,使用 **for** 语句。

"for" 循环的语法

PHP 中 **for** 语句的语法类似于 C 语言中的 for 语句。

for (expr1; expr2; expr3){
   code to be executed;
}

**for** 关键字后跟一个包含三个用分号分隔的表达式的括号。它们每个都可以为空,或者可以包含用逗号分隔的多个表达式。括号后跟一个或多个放在花括号内的语句。它构成循环的主体。

括号中的第一个表达式只在循环开始时执行一次。它通常充当 **初始化器**,用于设置循环迭代次数计数器的起始值。

在每次迭代开始时,都会计算 **expr2** 的值。如果其计算结果为真,则循环继续,并执行主体块中的语句。如果其计算结果为假,则循环执行结束。通常,**expr2** 指定计数器的最终值。

**expr3** 在每次迭代结束时执行。在大多数情况下,此表达式递增计数器变量。

示例

**for** 循环最通用的示例如下:

<?php
   for ($i=1; $i<=10; $i++){
      echo "Iteration No: $i \n";
   }
?>

以下是它的 **输出**:

Iteration No: 1
Iteration No: 2
Iteration No: 3
Iteration No: 4
Iteration No: 5
Iteration No: 6
Iteration No: 7
Iteration No: 8
Iteration No: 9
Iteration No: 10

无限 "for" 循环

请注意,括号中的三个表达式都是可选的。只有两个分号的 **for** 语句构成无限循环。

for (; ;) {
   Loop body
}

要停止无限迭代,需要在循环体中使用 **break** 语句。

递减 "for" 循环

你还可以形成递减的 **for** 循环。要使 **for** 循环从 10 到 1,将循环变量初始化为 10,中间的表达式在每次迭代开始时计算其值是否大于 1。每次迭代结束时要执行的最后一个表达式应将其递减 1。

<?php
   for ($i=10; $i>=1; $i--){
      echo "Iteration No: $i \n";
   }
?>

它将产生以下 **输出**:

Iteration No: 10 
Iteration No: 9 
Iteration No: 8 
Iteration No: 7 
Iteration No: 6 
Iteration No: 5 
Iteration No: 4 
Iteration No: 3 
Iteration No: 2 
Iteration No: 1

使用 "for...endfor" 结构

你也可以使用 ":" (冒号) 符号开始循环块,并在块的末尾放置 **endfor** 语句。

<?php
   for ($i=1; $i<=10; $i++):
      echo "Iteration No: $i \n";
   endfor;
?>

使用 "for" 循环迭代索引数组

数组中的每个元素都由从 "0" 开始递增的索引标识。如果存在 5 个元素的数组,则其下界为 0,上界为 4 (数组大小 -1)。

要获取数组中的元素个数,可以使用 count() 函数。因此,我们可以使用以下 **for** 语句迭代索引数组:

<?php
   $numbers = array(10, 20, 30, 40, 50);

   for ($i=0; $i<count($numbers); $i++){
      echo "numbers[$i] = $numbers[$i] \n";
   }
?>

它将产生以下 **输出**:

numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50

使用 "for" 循环迭代关联数组

PHP 中的关联数组是键值对的集合。箭头符号 (=>) 用于显示键与其值之间的关联。我们使用 **array_keys()** 函数来获取键数组。

下面的 **for** 循环从代码中定义的关联数组 **$capitals** 中打印每个州的首府:

<?php
   $capitals = array(
      "Maharashtra"=>"Mumbai", 
      "Telangana"=>"Hyderabad", 
      "UP"=>"Lucknow", 
      "Tamilnadu"=>"Chennai"
   );
   $keys=array_keys($capitals);

   for ($i=0; $i<count($keys); $i++){
      $cap = $keys[$i];
      echo "Capital of $cap is $capitals[$cap] \n";
   }
?>

以下是它的 **输出**:

Capital of Maharashtra is Mumbai
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai

在 PHP 中使用嵌套 "for" 循环

如果在现有循环的主体内部使用另一个 **for** 循环,则称这两个循环已嵌套。

对于外循环的计数器变量的每个值,都会完成内循环的所有迭代。

<?php
   for ($i=1; $i<=3; $i++){
      for ($j=1; $j<=3; $j++){
         echo "i= $i j= $j \n";
      }
   }
?>

它将产生以下 **输出**:

i= 1 j= 1
i= 1 j= 2
i= 1 j= 3
i= 2 j= 1
i= 2 j= 2
i= 2 j= 3
i= 3 j= 1
i= 3 j= 2
i= 3 j= 3

请注意,字符串是一种数组形式。**strlen()** 函数给出字符串中的字符数。

示例

以下 PHP 脚本使用两个嵌套循环在每一行打印来自字符串的递增数量的字符。

<?php
   $str = "TutorialsPoint";
   for ($i=0; $i<strlen($str); $i++){
      for ($j=0; $j<=$i; $j++){
         echo "$str[$j]";
      }
      echo "\n";
   }
?>

它将产生以下 **输出**:

T
Tu
Tut
Tuto
Tutor
Tutori
Tutoria
Tutorial
Tutorials
TutorialsP
TutorialsPo
TutorialsPoi
TutorialsPoin
TutorialsPoint
广告