ZetCode

PHP match

最后修改于 2025 年 2 月 16 日

PHP match 表达式教程展示了如何使用 match 在 PHP 中进行流程控制。

match 表达式是一种强大的控制流程结构,我们可以在其中将值与多个备选项进行比较。它类似于 switch 表达式。

match 表达式返回一个值。它必须以分号结尾。一个 match arm 严格比较值 (===)。 Match arms 不会向下穿透到后面的 case。default 关键字用于所有未包含在 arms 中的其他选项。

在 if/else 或 switch 语句中,每个单独的条件称为一个分支;在模式匹配中,使用术语 arm 来代替。

PHP match 整数字面量

在第一个例子中,我们匹配整数字面量。

main.php
<?php

$menu = <<<MENU
Select option
1 - start
2 - slow down
3 - accelerate
4 - pause
5 - terminate
MENU;

echo "$menu\n";

$opt = intval(trim(fgets(STDIN)));

$res = match ($opt) {

    1 => 'start',
    2 => 'slow down',
    3 => 'accelerate',
    4 => 'pause',
    5 => 'terminate',
    default => 'unknown'
};

echo "your option: $res\n";

我们有一个选项菜单;每个选项用一个整数表示。

$opt = intval(trim(fgets(STDIN)));

我们从命令行读取一个值。

$res = match ($opt) {

    1 => 'start',
    2 => 'slow down',
    3 => 'accelerate',
    4 => 'pause',
    5 => 'terminate',
    default => 'unknown'
};

match 表达式将所选选项与一系列值进行匹配。 每个 arm 由逗号分隔。 对于所有其他选项,我们使用 default 关键字。

echo "your option: $res\n";

我们打印所选选项。

PHP match 字符串字面量

在第二个例子中,我们匹配字符串字面量。

main.php
<?php

$langs = ['russian', 'slovak', 'german',
         'swedish', 'hungarian', 'french', 'spanish'];

echo("say hello\n");

foreach ($langs as $lang) {

    $res = match ($lang) {
        'russian' => 'привет',
        'hungarian' => 'szia',
        'french' => 'salut',
        'spanish' => 'hola',
        'slovak' => 'ahoj',
        'german' => 'hallo',
        'swedish' => 'Hallå'
    };

    echo "$res\n";
}

我们有一个语言列表。 我们遍历列表,并为每种语言打招呼。

$ php main.php 
say hello
привет
ahoj
hallo
Hallå
szia
salut
hola

PHP match 多个选项

一个 arm 中的多个选项用逗号分隔。

main.php
<?php 

$grades = ['A', 'B', 'C', 'D', 'E', 'F', 'FX'];

foreach ($grades as $grade) {

    $res = match ($grade) {
        'A' , 'B' , 'C' , 'D' , 'E' , 'F' => 'passed',
        'FX' => 'failed'
    };

    echo "$res\n";
}

我们有一个成绩列表。对于 A 到 F 的成绩,我们通过了示例。对于 FX 成绩,我们考试不及格。

$ php main.php 
passed
passed
passed
passed
passed
passed
failed

PHP match 条件 arms

在下一个例子中,我们在 match arms 中有条件。

main.php
<?php 

$r = rand(-5, 5);

$res = match (true) {
    $r < 0 => "${r}: negative value",
    $r === 0 => "${r}: zero",
    $r > 0  => "${r}: positive value"
};

echo "$res\n";

该示例选择一个随机整数。 使用 match 我们确定该值是负数、零还是正数。

$r < 0 => "${r}: negative value",

如果 $r 小于零,则执行此 arm。

来源

PHP 语言参考

在本文中,我们介绍了 PHP match 表达式。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 PHP 教程。