做一些像:if($ variable == 1 || $ variable ==“whatever”|| $ variable =='492')。

时间:2011-11-20 22:45:15

标签: php

我发现自己正在做这种IF语句分配。例如:

if($variable == 1 || $variable == "whatever" || $variable == '492') { ... }  

除了分配时间外,我将$变量与4-5项内容进行比较,有时甚至更多。有没有一个简短的方法来写这个?您可以看到重复$variable ==会变得多余。

我很乐意为此工作,但事实并非如此:

if($variable == (1 || "whatever" || 492) { ... }

5 个答案:

答案 0 :(得分:10)

您可以使用此简写,但请记住,使用或子句显式列出它们的效率较低:

if(in_array($variable, array(1, 'whatever', '492'))){ ... }

此外,如果您想使用===代替==,则等效项为:

if(in_array($variable, array(1, 'whatever', '492'), TRUE)){ ... }

答案 1 :(得分:4)

if(in_array($variable, array(1, "whatever", 492)))

答案 2 :(得分:2)

答案 3 :(得分:1)

虽然这不能直接回答这个问题,但我认为值得添加此方法作为解决上述问题的一部分:

如果您发现某些内容有多个值,可能会发现以下内容合适:

if (true === is_condition_one ( $variable )) {

  // Execute any condition_one logic here

}

function is_condition_one ( $variable = null ) {
  $arrKnownConditions = array (
    // This can be an array from the database
    // An array from a file
    // An array from any other source
    // or an array of hardcoded values
  );

  return in_array ( $variable, $arrKnownConditions );

}

我同意Godwin和toon81以及PaulPRO,但是如果你这么做的话,你可能会从重构中受益,作为解决方案的一部分。上面的重构可以帮助您更好地组织此项目和其他项目,方法是定义比较的目的,让代码更具可读性,并将这些硬编码值抽象为函数。这可能也会帮助您更有信心地在代码的其他部分重复使用该检查。

答案 4 :(得分:0)

另一种可行的替代方法是使用正则表达式。

if (preg_match('^1|whatever|492$', $variable)) { ... }