程序要会两件基本的事:看情况办事(分支),和重复干活(循环)。今天把 PHP 里最常用的 if、switch、for、while 一次过一遍。

if 分支:最常用的判断

if 按条件决定执行哪段代码,条件为 true 走 if,否则走 else。

<?php
$score = 76;

if ($score >= 90) {
    echo "优秀";          // 90 分以上
} elseif ($score >= 60) {
    echo "及格";          // 60~89,本例输出这个
} else {
    echo "不及格";
}

注意写法是 elseif(也可以写 else if),多个条件从上往下依次判断,命中一个就跳出,后面的不再看。

判断相等要写两个等号 ==,一个等号 = 是赋值,这是新手最常见的笔误。另外 PHP 里 == 会做类型转换,0 == "abc" 居然是 true,想严格比较就用三个等号 ===。

switch:一个变量对多个值

同一个变量要跟一堆值比较时,switch 比一长串 elseif 清爽:

<?php
$fruit = "apple";

switch ($fruit) {
    case "apple":
        echo "苹果";
        break;
    case "banana":
        echo "香蕉";
        break;
    default:
        echo "不认识的水果";
}

每个 case 结尾记得写 break,否则程序会"掉"进下一个 case 继续执行——这个坑叫穿透,十个 PHP 新手九个踩过。default 相当于 else,兜底处理。

for 循环:知道要循环几次

for 的结构和 C 语言一样,三段式:初始化、条件、步进。

<?php
for ($i = 1; $i <= 5; $i++) {
    echo "第 $i 次\n";
}
// 输出 第 1 次 到 第 5 次

来个实用点的,用 for 算 1 到 100 的和:

<?php
$sum = 0;
for ($i = 1; $i <= 100; $i++) {
    $sum += $i;
}
echo $sum;    // 5050

while:不知道几次,先干了再说

while 每轮先判断条件,成立才执行,适合"次数不确定"的场景:

<?php
$n = 1;
while ($n <= 3) {
    echo "n = $n\n";
    $n++;
}
// n = 1
// n = 2
// n = 3

条件一开始就不成立时,循环体一次都不会跑。如果希望至少跑一次,用 do-while:

<?php
$n = 100;
do {
    echo "至少执行一次:n = $n\n";
    $n++;
} while ($n <= 3);
// 虽然条件不成立,但还是输出了一行

用 while 时务必在循环体里推动条件变化(比如 $n++),否则就是死循环,页面会卡死。

循环控制:break 与 continue

break 直接跳出整个循环,continue 跳过本轮继续下一轮:

<?php
for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 === 0) {
        continue;    // 偶数跳过
    }
    if ($i > 7) {
        break;       // 超过 7 就收工
    }
    echo "$i ";      // 输出:1 3 5 7
}

顺便说一句 foreach

遍历数组在 PHP 里几乎不用 for,而是用 foreach,专门为遍历而生:

<?php
$langs = ["php", "css", "python"];

foreach ($langs as $lang) {
    echo "$lang\n";
}
// php
// css
// python

需要下标时写 foreach ($langs as $i => $lang) 即可。

小结

  • if / elseif / else 处理区间判断,严格比较用 ===
  • switch 适合一个变量对多个固定值,case 别忘了 break
  • for 用于已知次数,while 用于未知次数,do-while 至少执行一次
  • break 跳出循环,continue 跳过本轮
  • 遍历数组优先用 foreach

这四套结构是所有 PHP 程序的骨架,把它们的脾气摸透,后面学函数、学数据库都不在话下。