PHP如何缩短if语句

5

如何正确地编写代码:

if ($variable == '(value1/value2/value3)' ) { }

它应该类似于:

if ($variable == 'value1' || $variable == 'value2' || $variable == 'value3') { }

我想让这段代码变得更短(现在我使用了switch语句)。

谢谢。


1
我会坚持使用 switch - TRiG
3个回答

15

尝试使用 in_array() 函数:

if (in_array($variable, array('value1', 'value2', 'value3'))) {}
如果你遇到一组由,分隔的值,在你的例子中,只需使用explode()函数将其分割成数组,然后将该数组传入in_array()函数即可:
if (in_array($variable, explode('/', 'value1/value2/value3'))) {}

虽然这是一长串值,看起来似乎可以使用 strpos(),但这不是处理包含多个值的分隔字符串的方法(应该使用上述的 explode()):

if (strpos('value1/value2/value3', $variable) !== false) {}

使用 strpos 函数获取类似于 "value1/val" 或 "ue1" 的值。 - Valentin Golev
@valya:确切地说,这就是为什么strpos()不是正确的方法,即使一开始看起来似乎很有道理 :) - BoltClock
6
使用正则表达式是否简单?例如:if(preg_match('/%$6^$%^-jil9(&(((&&(&((&%%%88&value1^&^))&!@#!value2%^^&^^value3', '(value1/value2/value3)');` ?如果你问我,有时候你们就是没想清楚 ;) - karim79
2
@karim79:哈哈,这让我笑了 :) - BoltClock

2
switch ($variable)
{
    case "value1":
    case "value2":
    case "value3":
        ...
        break;
    default: // else
        ...
}

2

也可以更简短:

if (preg_match('#^(?:value1|value2|value3)$#', $variable) {

并不是说这是做事情的最佳方式。使用if和||语句的长方法虽然冗长但易于阅读,并且运行效率最高。


value[1-3] 可以通过适当的修改来适用于 PHP 的正则表达式。 - Cole Tobin
我认为很明显value1、value2和value3只是为了举例而使用的占位符。 - thomasrutter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接