2012-03-07 127 views
0

我有一个作为一个简单的数据库的文本文件,每个条目跨越两行,像这样:哪种方法更快?

name 
number 
bob 
39 
jack 
22 
jill 
85 

现在说,我有一个数组分开的每一行,我要分析每个名称和看看它是否等于一个变量。这样做会更快:

if($variable == $line) { 
    //true 
} 

或者先过滤出偶数行(名称),然后分析它们以查看它们是否等于变量?如果你不知道,下面的第一行基本上会发现计数的剩余部分(这全部在foreach循环中)除以2,如果它等于0,那么它是偶数。

if ($count%2 == 0) { 
    if($variable == $line) { 
     //true 
    } 
} 

谢谢。

+0

为什么要经历偶数的麻烦?这样做的目的是什么?直接找到他们! – Joseph 2012-03-07 04:03:33

回答

1

我肯定会跟根据“一些第一个样式去“情况。例如,您认为您的平等运作需要多长时间?在我看到整数或双打被比较的情况下,这种第一种风格对我个人而言似乎好得多。

模运算符在我的书中是一个昂贵的操作。如果你有一个庞大的数据库进行模操作会花费很多时间。你可以尝试使用其他方法Reference这样的东西来加快速度。

我希望你对上面的代码做一个时间研究,看看你自己的时间差异。当我使用约5百万个数据集的模操作时,我遇到了一些与时间有关的重大问题。

根据其中一个答案进行编辑。

绝对使用已提供的+ = 2操作,而不是模数以及第一种情况。

0

第二个更快。对于像这样的处理,假设计算时间可以忽略不计,而且试验次数会对您的速度产生更大的影响。就程序效率而言,这几乎总是这样。特别是与简单检查相比,如两个if陈述与一个。

0

if语句合并为第二个语句以获得更高的速度。

if($count%2==0 && $variable==$line) { 
} 
+0

我认为翻译已经采取了这种优化(在低级代码中)。 – 2012-03-07 04:07:25

+0

我不确定它是否存在。但如果没有,那么它会加快速度。 – judda 2012-03-07 04:09:49

0

我假设你有一个像

$lines = array('bob', '39', 'jack', '22', 'jill', '85'); 

数组然后直接跳过奇数行你for循环:

for ($i=0, $len=count($lines); $i<$len; $i+=2) { 
    if ($lines[$i] == $var) { 
     // true 
    } 
}