摘要訊息 : 學習 PHP 中的迴圈.

0. 前言

本文于 2022 年 3 月 18 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. while 语句

while(条件判断) {
    statement
}

当 条件判断 返回 True, 则一直执行 while 内的语句一次 statement; 直到 条件判断 返回 False 的时候, 退出循环.

while 语句的另外一种书写格式 :

while(条件判断) :
    statement
endwhile;

2. do-while 语句

do {
    statement
}while(条件判断);

先执行一次循环内的语句 statement, 再去条件判断, 当 条件判断 返回 True, 则一直去执行循环内的语句一次 statement; 直到 条件判断 返回 False 的时候, 退出循环.

do-while 语句的另外一种书写方法 :

do :
    statement
while(条件判断);

3. for 语句

for(初始条件; 条件判断; 条件增量) {
    statement
}

首先赋予一个变量 初始条件, 并且当 条件判断 返回 True 的时候, 执行一次 for 循环内的语句 statement, 再改变变量数值继续判断, 当 条件判断 返回 True 的时候, 继续执行 for 循环内的语句, 直到 条件判断 返回 False 的时候退出循环.

for 循环的另外一种写法 :

for(初始条件; 条件判断; 条件增量) :
    statement
endfor;

4. foreach 语句

foreach 语句有点像 Swift 里面的 for-in 循环, 作用是对数组进行遍历 :

for(数组 as 数组元素值) {
    statement for array
}
for(数组 as 键值 => 数组元素值) {
    statement for array
}

示例 :

<?php
    $array = array("a" => "one", "b" => "two", "c" => "three");
    foreach($array as $key => $value) {
        echo $key." => ".$value;
        echo "\n";
    }
?>
/* 结果 :
    a => one
    b => two
    c => three
*/

5. break 关键字

在说 break 关键字之前, 首先总结一下 break 关键字的作用域 : for 语句, while 语句, do-while 语句, foreach语句和 switch 语句.

break 对于 switch 语句的作用, 在上一个课程中已经说的很清楚了, 这里不再累赘.

在这些语句中, 若 break 关键字被执行, 那么立刻跳出这些作用域的结构. 对于循环结构来说, 立刻停止循环, break下面的语句不再执行; 对于条件判断 switch 语句来说, 立刻停止判断, 跳出结构, break 下面的语句不再执行.

而 PHP 中, break 关键字有一个特性, 就是后面可以带一个数字, 即 break n. 此时就要用到 break 关键字的作用域. break n 后面的 n 代表跳出 nbreak 关键字作用域的结构. 下面有个以类 Debug Run 执行的实例 :

<?php
    $n = 0;
    while(1) {
        $n++;
        switch($n) {
            case 1 :    // 第一次执行的时候, $n = 1, 在 switch 语句中执行 echo $n; 和 break;, 那么输出的结果为 1
                echo $n;
                break;
            case 2 :    // 第二次执行的时候, $n = 2, switch 语句来到这里
                echo $n;    // 首先输出了 $n 的值 : 2
                break 2;    // 来到 break 2 语句, 首先执行第一次 break, 即跳出 switch 语句结构. 执行完毕之后, 因为 break 后面跟着的是 2, 所以还要执行一次 break, 即跳出 while 循环结构. 因为 while 循环外不再有语句, 所以到这里程序直接结束
            default :
                break;
        }
    }
?>
/* 结果 :
    12
*/

换句话说, break n 有点类似于一个循环, 即执行 nbreak. 所以, breakbreak 1 其实是一样的, 当你输入 break 的时候, 相当于在执行 break 1, 因为几乎没人喜欢后面加多个 1, 所以很少见到有人的程序里有 break 1.

6. continue 关键字

continue 关键字只作用于循环. continue 关键字的意思是结束这一次循环, 立刻进入下一个循环 (不是立刻寻找并进入下一个循环体, 是循环体内立刻停止并执行下一次循环) :

<?php
    $cnt = 0;    // 计数器, 计算女生的数量
    $arr = array(
        "A" =>"male",
        "B" => "female",
        "C" => "male",
        "D" => "female",
        "E" => "male",
        "F" => "male"
    );
    foreach($arr as $key => $value) {
        if($value == "male") {
            continue;    // 当性别为男性的时候, 执行 continue 语句, 即立刻停止循环, 进入下一个循环 (后面的 $cnt++ 不再执行, 否则就是每一个都计数
        }
        $cnt++;
    }
    echo $cnt;    // 结果 : 2
?>

continuebreak 相似, 在 PHP 中也有一个 continue n 的语句, 因为作用差不多, 所以这里不再累赘.