我发现自己正在做这种IF
语句分配。例如:
if($variable == 1 || $variable == "whatever" || $variable == '492') { ... }
除了分配时间外,我将$变量与4-5项内容进行比较,有时甚至更多。有没有一个简短的方法来写这个?您可以看到重复$variable ==
会变得多余。
我很乐意为此工作,但事实并非如此:
if($variable == (1 || "whatever" || 492) { ... }
答案 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)
in_array(...)。 http://php.net/manual/en/function.in-array.php
答案 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)) { ... }