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
廣告