2011-03-02 49 views
0

我有一个if声明,其中有几个or这是做这个简单的IF或OR语句的方法吗?

if($count == 1 || $count == 3 || $count == 7) { 
    // do stuff 
} 

我只是好奇 - 这是做到这一点的最好方法是什么?通过上面这个简单的例子,有没有更快的方法来做到这一点,如果是这样,它是什么?

+0

如果要求更快的方法,您是否有与此代码相关的任何性能问题? – 2011-03-02 06:09:52

+0

没有性能问题,更多只是想知道是否有捷径实现相同。当那里有10个或者语句时,它可能会有点冗长和重复。 – willdanceforfun 2011-03-05 01:16:44

回答

3

您的代码正常工作。或者,你可以使用in_array(),这是一个有点更干净,更好地伸缩:

if (in_array($count, array(1,3,7))) { ... } 
+2

实际上,这比原来的例子慢了大约4倍......授予它需要(在我的服务器上)116ms vs 449ms运行一百万次......尽管如此,它更清晰易读。使用少量数据 - 速度可以忽略不计。大事情 - in_array表现非常缓慢。 – Sergey 2011-03-02 05:06:04

+1

@Sergey好了,这种情况似乎从来没有遇到过大阵列,不是吗? – 2011-03-02 06:08:42

+0

如果你在那里粘贴了一百万件物品,那么你做错了。 – 2011-03-02 16:35:44

1

您可以指定数组中的所有可能的值,并检查使用array_search功能

$array=array(1,3,7); 

if (array_search($count,$array) !== FALSE) 
{ 
    //do stuff 
} 
3

你写的代码很好。正如Paul Schreiber所说,还有其他各种可供选择的选择。

你可能想要考虑的一件事(我知道这只是一个例子)就是为什么你检查的值很重要。他们都有一些共同的财产,你正在检查?如果是这样,那么象征性地声明属性可能使代码更易于理解。例如:

if (is_odd($x) && $x < 10) { 
    //... 
} 

而不是

if ($x == 1 || $x == 3 || $x == 5 || $x == 7 || $x == 9) { 
    //... 
} 

这是一个相当人为的例子,但我希望你明白我在获得。

至于更具体的例子,而不是做这样的事情:

if ($user->age > 65 
    || $user->years_of_custom > 3 
    || $num_items > 5) { 
     // Give this user a discount .... 
} 

你可能想要做的:

if (eligible_for_discount($user, $num_items)) { 
    // Give this user a discount 
} 

即使你只在这一个地方使用的功能,这可能增加代码的可读性。很明显,你必须使用你的判断,因为你增加了可读性,代价是需要更多的代码来维护,而这并不总是正确的选择。如果条件与对方没什么关系,将它们绑定到单独的函数中可能没有意义,并且使代码更难以遵循,而不是更容易。关注你的代码的实际含义,以及人类应该如何理解它。

+0

+深思熟虑 – codercake 2011-03-02 05:17:49

+0

谢谢你。我不知道有一个is_odd函数。 – willdanceforfun 2011-03-05 01:18:28

0

switch声明不会更好吗?

switch ($count) { 
    case 1: 
    case 3: 
    case 7: 
    echo "do stuff"; 
    break; 
} 
+0

如果1,3,7以及所有这些值都是动态的,并且在变量或数组中,那么如何更改开关语句? – Daric 2011-03-02 06:02:03