多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# PHP 中的控制流 > 原文: [https://zetcode.com/lang/php/flowcontrol/](https://zetcode.com/lang/php/flowcontrol/) 在 PHP 教程的这一部分中,我们讨论流控制。 我们定义了几个关键字,这些关键字使我们能够控制 PHP 脚本的流程。 ## PHP `if`语句 `if`语句具有以下一般形式: ```php if (expression) statement ``` `if`关键字用于检查表达式是否为真。 如果为`true`,则执行一条语句。 该语句可以是单个语句或复合语句。 复合语句由用大括号括起来的多个语句组成。 `ifstatement.php` ```php <?php $num = 31; if ($num > 0) echo "\$num variable is positive\n"; ``` 我们有一个`$num`变量。 它分配了值 31。`if`关键字检查布尔表达式。 表达式放在方括号之间。 表达式`31 > 0`为`true`,因此将执行下一条语句。 如果只有一条语句要执行,则花括号是可选的。 ```php $ php ifstatement.php $num variable is positive ``` 这是示例的输出。 `ifstatement2.php` ```php <?php $num = 31; if ($num > 0) { echo "\$num variable is positive\n"; echo "\$num variable equals to $num\n"; } ``` 如果我们打算执行多个语句,则必须将它们放在方括号内。 如果我们不使用它们,则只会执行第一条语句。 圆括号形成了`if`语句的主体。 我们可以使用`else`关键字来创建一个简单的分支。 如果`if`关键字后面方括号内的表达式的值为`false`,则`else`主体内的语句将自动执行。 `boyorgirl.php` ```php <?php $sex = "female"; if ($sex == "male") { echo "It is a boy\n"; } else { echo "It is a girl\n"; } ``` 我们有一个`$sex`变量。 它具有`"female"`字符串。 布尔表达式的计算结果为`false`,我们在控制台中得到`"It is a girl"`。 ```php $ php boyorgirl.php It is a girl ``` This is the output of the example. 我们可以使用`elseif`关键字创建多个分支。 仅当不满足先前条件时,`elseif`关键字才会测试其他条件。 请注意,我们可以在测试中使用多个`elseif`关键字。 `ifelsestm.php` ```php <?php echo "Enter a number: "; $a = intval(fgets(STDIN)); if ($a < 0) { printf("%d is a negative number\n", $a); } elseif ($a == 0) { printf("%d is a zero\n", $a); } elseif ($a > 0) { printf("%d is a positive number\n", $a); } ``` 我们使用`fgets()`函数从用户读取一个值。 将测试该值是负数还是正数或等于零。 ```php $ php ifelsestm.php Enter a number: 4 4 is a positive number $ php ifelsestm.php Enter a number: -3 -3 is a negative number ``` 程序的示例输出。 ## PHP `switch`语句 `switch`语句是选择控制流语句。 它允许变量或表达式的值通过多路分支控制程序执行的流程。 与使用`if`和`elseif`语句相比,它以更简单的方式创建多个分支。 `switch`语句与其他两个关键字一起使用:`case`和`break`。 `case`关键字用于根据圆括号中的值测试标签。 如果标签等于该值,则执行案例后面的语句。 `break`关键字用于跳出`switch`语句。 有一个可选的`default`语句。 如果所有标签都不等于该值,则执行默认语句。 `domains.php` ```php <?php $domain = 'sk'; switch ($domain) { case 'us': echo "United States\n"; break; case 'de': echo "Germany\n"; break; case 'sk': echo "Slovakia\n"; break; case 'hu': echo "Hungary\n"; break; default: echo "Unknown\n"; break; } ``` 在我们的脚本中,我们有一个`$domains`变量。 它具有`"sk"`字符串。 我们使用`switch`语句测试变量的值。 有几种选择。 如果该值等于`"us"`,则将`"United States"`字符串打印到控制台。 ```php $ php domains.php Slovakia ``` 我们得到`Slovakia`。 如果将`$domains`变量更改为`'rr'`,则会得到`'Unknown'`字符串。 ## PHP `while`循环 `while`是一个控制流语句,它允许根据给定的布尔条件重复执行代码。 这是`while`循环的一般形式: ```php while (expression): statement ``` 当表达式的值为真时,`while`循环执行该语句。 该语句是一个简单的语句,以分号或用大括号括起来的复合语句终止。 `whilestm.php` ```php <?php $i = 0; while ($i < 5) { echo "PHP language\n"; $i++; } ``` 在代码示例中,我们反复将`"PHP language\n"`字符串打印到控制台。 `while`循环包含三个部分:初始化,测试和更新。 语句的每次执行都称为循环。 ```php $i = 0; ``` 我们启动`$i`变量。 它在我们的脚本中用作计数器。 ```php while ($i < 5) { ... } ``` 方括号内的表达式是第二阶段,即测试。 `while`循环在主体中执行语句,直到表达式的计算结果为`false`。 ```php $i++; ``` `while`循环的最后第三阶段是更新。 计数器增加。 请注意,对`while`循环的不正确处理可能会导致循环不断。 ```php $ php whilestm.php PHP language PHP language PHP language PHP language PHP language ``` 该程序将消息打印到控制台五次。 `do while`循环是`while`循环的版本。 不同之处在于,保证该版本至少运行一次。 `dowhile.php` ```php <?php $count = 0; do { echo "$count\n"; } while ($count != 0) ``` 首先执行迭代,然后求值真值表达式。 `while`循环通常与`list()`和`each()`函数一起使用。 `seasons.php` ```php <?php $seasons = ["Spring", "Summer", "Autumn", "Winter"]; while (list($idx , $val) = each($seasons)) { echo "$val\n"; } ``` `$seasons`数组有四个季节。 我们浏览所有值并将它们打印到控制台。 `each()`函数从数组返回当前键和值对,并前进数组光标。 当函数到达数组末尾时,它返回`false`并终止循环。 `each()`函数返回一个数组。 赋值的左侧也必须有一个数组。 我们使用`list()`函数从两个变量创建一个数组。 ```php $ php seasons.php Spring Summer Autumn Winter ``` 这是`seasons.php`脚本的输出。 ## PHP 关键字 `for`循环与`while`循环具有相同的作用。 只是将所有三个阶段(初始化,测试和更新)放在圆括号之间。 它主要用于在进入循环之前知道迭代次数的情况。 让我们举一个`for`循环的例子。 `forloop.php` ```php <?php $days = [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]; $len = count($days); for ($i = 0; $i < $len; $i++) { echo $days[$i], "\n"; } ``` 我们每周有几天。 我们希望从数组中打印所有这些天。 ```php $len = count($days); ``` 或者我们可以以编程方式找出数组中的项目数。 ```php for ($i = 0; $i < $len; $i++) { echo $days[$i], "\n"; } ``` 这里我们有`for`循环结构。 这三个阶段用分号分隔。 首先,启动`$i`计数器。 启动部分仅发生一次。 接下来,进行测试。 如果测试结果为`true`,则执行该语句。 最后,计数器增加。 这是一个周期。 `for`循环迭代直到测试表达式为假。 ```php $ php forloop.php Monday Tuesday Wednesday Thursday Friday Saturday Sunday ``` 这是`forloop.php`脚本的输出。 ## PHP `foreach`语句 `foreach`构造简化了遍历数据集合的过程。 它没有明确的计数器。 `foreach`语句一个接一个地遍历数组,并将当前值复制到构造中定义的变量中。 在 PHP 中,我们可以使用它遍历数组。 `foreachstm.php` ```php <?php $planets = [ "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" ]; foreach ($planets as $item) { echo "$item "; } echo "\n"; ``` 在此示例中,我们使用`foreach`语句遍历一系列行星。 ```php foreach ($planets as $item) { echo "$item "; } ``` `foreach`语句的用法很简单。 `$planets`是我们迭代通过的数组。 `$item`是具有数组中当前值的临时变量。 `foreach`语句遍历所有行星并将它们打印到控制台。 ```php $ php foreachstm.php Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune ``` 运行上面的 PHP 脚本将给出此输出。 `foreach`语句还有另一种语法。 它与地图一起使用。 `foreachstm2.php` ```php <?php $benelux = [ 'be' => 'Belgium', 'lu' => 'Luxembourgh', 'nl' => 'Netherlands' ]; foreach ($benelux as $key => $value) { echo "$key is $value\n"; } ``` 在我们的脚本中,我们有一个`$benelux`映射。 它包含映射到比荷卢三国的域名。 我们遍历数组并将键及其值都打印到控制台。 ```php $ php foreachstm2.php be is Belgium lu is Luxembourgh nl is Netherlands ``` 这是脚本的结果。 ## PHP `break`,`continue`语句 `break`语句用于终止循环。 `continue`语句用于跳过循环的一部分,并继续循环的下一个迭代。 `testbreak.php` ```php <?php while (true) { $val = rand(1, 30); echo $val, " "; if ($val == 22) break; } echo "\n"; ``` 我们定义了一个无限的`while`循环。 使用`break`语句,只有一种方法可以跳出这样的循环。 我们从 1 到 30 中选择一个随机值并打印出来。 如果该值等于 22,则结束无穷的`while`循环。 ```php $ php testbreak.php 6 11 13 5 5 21 9 1 21 22 ``` 我们可能会得到这样的东西。 在下面的示例中,我们打印一个数字列表,这些数字不能除以 2 而没有余数。 `testcontinue.php` ```php <?php $num = 0; while ($num < 1000) { $num++; if (($num % 2) == 0) continue; echo "$num "; } echo "\n"; ``` 我们使用`while`循环遍历数字`1..999`。 ```php if (($num % 2) == 0) continue; ``` 如果表达式`$num % 2`返回 0,则可以将所讨论的数字除以 2。执行`continue`语句,并跳过循环的其余部分。 在我们的例子中,循环的最后一条语句将被跳过,并且数字不会输出到控制台。 下一个迭代开始。 在 PHP 教程的这一部分中,我们正在讨论控制流结构。