【问题标题】:Preg_match in switch case in PHP? [duplicate]PHP中switch case中的preg_match? [复制]
【发布时间】:2016-08-08 13:21:18
【问题描述】:

我在 php 中制作 switch 功能,我想知道是否可以制作这样一种情况:

switch($message){
        case 'hi':
            $output = $jsonWelcome;
            break;
        case preg_match('/start/', $message):
            $output = $jsonHelp;
            break;
}

我想在 $message 为例如“项目启动”或“启动项目”时执行最后一种情况。我认为那是因为 preg_match 返回 0 或 1。有什么方法可以使这段代码正常工作吗?

【问题讨论】:

  • 据我所知没有。你总是可以做一个 if 语句
  • 使用if/elseif/else 而不是switch

标签: php switch-statement preg-match case


【解决方案1】:
switch($message){
        case 'hi':
            $output = $jsonWelcome;
            break;
        case (preg_match('/start/', $message) ? true : false):
            $output = $jsonHelp;
            break;
}

应该可以正常工作。

示例工作代码: http://sandbox.onlinephpfunctions.com/code/99ab518718ce9488277619a33dbfdf353f0c2316

【讨论】:

  • 您正在将条件语句添加到案例语句中。这只会让事情变得更加复杂和冗长。
  • @akDeveloper 我有点同意。但是,考虑到它在问题的规范范围内,我相信它是完全有效的。我确实认为 if/else 树会更合适,但显然 OP 无视这一点是有原因的。
  • 如果您认为 if/else 语句更合适,那么您的答案应该包括 if/else。在这种情况下,我个人更喜欢switch(true),它的作用类似于if/else,但结构更好。
  • 还有@iyop45,如果是$message = null$message = "",您的代码将无法正常工作
【解决方案2】:

如果您想保存代码更具可读性和编译器友好性,请使用此选项:

switch($message){
        case 'hi':
            $output = $jsonWelcome;
            break;
        default:
            $output = preg_match('/start/', $message) ? $jsonHelp : "";
}

【讨论】:

    【解决方案3】:

    你可以使用这个sn-p:

    switch(true){
            case $message == 'hi':
                $output = $jsonWelcome;
                break;
            case 1 == preg_match('/start/', $message):
                $output = $jsonHelp;
                break;
    }
    

    所有条件都应该评估true

    【讨论】:

    • 在这种情况下使用 switch 语句有什么意义?
    • Switch 语句比if 语句更具可扩展性,并生成更清晰的代码。所以以后可以添加更多的条件,而不需要重构代码。
    • 当您使用switch(true) 时,您的观点有些多余。这不是标准用法,所以在这种情况下,我认为它不太清楚。对于您的代码,每个分支都需要 $message = "abc",这会使 switch 语句毫无意义。
    • 没错。对于这种情况,ifelse 语句可以完成这项工作。但是,如果有人想使用switch 语句,我认为我的示例对于这种情况更清楚。想象多个preg_match 案例。那么$message 变量也应该出现在每个分支中,对吧?
    • 我已经缩短了我的例子,到目前为止它有9个条件,将来可能会有更多。
    猜你喜欢
    • 2011-10-24
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2013-05-15
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多