PHP比较效率($ var ==($ var1 || $ var2))

时间:2014-05-27 18:31:24

标签: php conditional

我想知道在以下情况下是否有更有效的方法来执行以下操作:

if($var == $var1 || $var == $var2)

我想到了

if($var == ($var1 || $var2))但这根本不起作用。请原谅我的犹豫不决的问题,我从来没有问过自己这么简单的事情。

4 个答案:

答案 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与前者进行比较,后者可以是falsetrue,并确定$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))