如果我在PHP中循环,并知道我想要迭代多少次,我通常会像这样使用for循环:
for($y=0; $y<10; $y++) {
// ...
}
但是最近我看到有人使用了foreach循环:
foreach (range(1, 10) as $y) {
// ...
}
现在,我发现foreach-loop更具可读性,并考虑采用这种foreach-construct。但另一方面,for循环更快,如下所示。
我做了一些速度测试,结果如下。
FOREACH:
$latimes = [];
for($x=0; $x<100; $x++) {
$start = microtime(true);
$lcc = 0;
foreach (range(1, 10) as $y) {
$lcc ++;
}
$latimes[$x] = microtime(true) - $start;
}
echo "Test 'foreach':\n";
echo (float) array_sum($latimes)/count($latimes);
我跑了五次之后的结果:
Test 'foreach': 2.2873878479004E-5
Test 'foreach': 2.2327899932861E-5
Test 'foreach': 2.9709339141846E-5
Test 'foreach': 2.5603771209717E-5
Test 'foreach': 2.2120475769043E-5
:用于:
$latimes = [];
for($x=0; $x<100; $x++) {
$start = microtime(true);
$lcc = 0;
for($y=0; $y<10; $y++) {
$lcc++;
}
$latimes[$x] = microtime(true) - $start;
}
echo "Test 'for':\n";
echo (float) array_sum($latimes)/count($latimes);
我跑了五次之后的结果:
Test 'for': 1.3396739959717E-5
Test 'for': 1.0268688201904E-5
Test 'for': 1.0945796966553E-5
Test 'for': 1.3313293457031E-5
Test 'for': 1.9807815551758E-5
我想知道的是你喜欢什么,为什么?哪一个对您来说更具可读性,您是否更喜欢可读性而不是速度?
答案 0 :(得分:0)
以下代码示例是在codeigniter框架的基准库下用php编写的(它只是为了节省我的时间,因为我目前正在使用这些:D),如果您使用其他语言,请将此视为您的语言的伪代码实现办法。对任何编程语言实现这一点应该没有任何问题。如果您有使用php / codeigniter的经验,那么您很幸运,只需复制粘贴此代码并测试:)。
$data = array();
for($i=0;$i<500000;$i++){
$data[$i] = rand();
}
$this->benchmark->mark('code_start');
for($i=0;$i<500000;$i++){
;
}
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
echo "<br/>";
$this->benchmark->mark('code_start');
foreach($data as $row){
;
}
$this->benchmark->mark('code_end');
我在这两个循环之间有2秒的差异(一个后来一个跑了大约3秒,而第一个跑了大约5秒)。所以,foreach循环在这里赢得了“为vs foreach而战”。但是,你可能会想,我们不需要这么大的循环;可能并非在所有情况下,但在某些情况下可能需要长循环,例如从web服务/ xml / csv等更新大型产品数据库。而且,此示例仅向您了解它们之间的性能差异。 / p>
但是,是的,他们都有一些独家使用,他们应该完全因为极端的容易/优化。就像,如果你在循环中工作,在某种情况下循环可以终止。在这种情况下,for循环将以最大的灵活性完成工作。另一方面,如果您从列表数组中获取每个对象/项目并进行处理,在这种情况下,foreach将为您提供最佳服务。