我想知道在以下情况下是否有更有效的方法来执行以下操作:
if($var == $var1 || $var == $var2)
我想到了
if($var == ($var1 || $var2))
但这根本不起作用。请原谅我的犹豫不决的问题,我从来没有问过自己这么简单的事情。
答案 0 :(得分:2)
如果我们假设您将'效率'用于表示运行时间(与其他措施,例如击键次数等),那么您最初拥有的效率与其获得的效率相同:< / p>
if($var == $var1 || $var == $var2)
条件运算符||
和&&
short circuit,如果$var
恰好等于$var1
,则意味着与$var2
进行比较永远不会发生。
如果你开始有许多条件,你只是想保持你的代码干净,你可以将所有可能的值存储在一个数组中,并检查数组中是否有$var
:< / p>
$possibleVals = array( 1, 2, 3 );
$var = 1;
if(in_array($var, $possibleVals)) {
// ...
然而,就运行时间而言,这并不像单独列出所有比较那样有效(对于你很可能甚至不会注意到差异的标称数量的元素)。
答案 1 :(得分:1)
如果您使用if
语句来定义变量。如果你在if语句中运行的代码块比你的第一个例子要好。
$myvar = ($var == $var1) ? $var1 : $var2;
这是语法的一个例子,但您也可以这样做:
$myvar = ($var == $var1) ? $var1 : ($var == $var2) ? $var2 : "doesn't match";
答案 2 :(得分:1)
你不能像这样对这样的测试进行因式分解,因此首先没有效率比较:)
if($var == $var1 || $var == $var2)
正如预期的那样,$var
是等于$var1
还是$var2
。
if($var == ($var1 || $var2))
它将首先在$var1
和$var2
之间进行逻辑OR,并测试其中一个是否为true-ish,并将结果作为布尔值返回。
然后,它会将$ var与前者进行比较,后者可以是false
或true
,并确定$var
是否为true-ish。
查看解决方法的其他答案!
if(($var == $var1) || ($var == $var2))
为了使代码更清晰,你可以将每个条件包装在括号中(由于precedence of &&
operator,这些不是强制性的),因此乍看之下不需要考虑运算符优先级
答案 3 :(得分:0)
in_array
功能if (in_array($var, [$var1, $var2]))
这比单独比较值的效率稍差(因为需要创建数组,遍历等)。 然而,对于所有人来说,这个问题肯定属于微观优化的范畴(因此可以忽略),但是最罕见的情况。
当你有几个要检查的值时,使用它是特别有意义的:
if (in_array($var, [$var1, $var2, $var3, $var4, $var5, "test", 42, $var8])) // ...
if ($var == $var1 || $var == $var2 || $var == $var3 || $var == $var4 || $var == $var5 || $var == "test" || $var == 42 || $var == $var8) // ...
如果您不习惯“新”数组语法([..]
),则这是旧的(array(..)
)语法:
if (in_array($var, array($var1, $var2))