仅当Loop到达其最后一个周期(循环结束)时才执行代码段

时间:2009-10-30 16:11:56

标签: php performance loops

代码块的最有效位置在哪里,只有在循环到达终点时才执行,而不会先中止(通过中断或返回)?

问题似乎平庸,答案显而易见,但我不安全!

非常欢迎效率/理论专业人士的回答!


  1. 提供:“某些代码X”始终相同,仅在不同的代码段位置1和2处。

  2. 我假设:2将以与1相同的可靠性执行。我错了吗?

  3. 我知道: 2显然效率更高,因为它只在循环运行$ limit times之后调用一次,而不是1,其封闭的if条件称为$ limit times ,如果一旦为真,则调用代码本身。因此,效率差异 if条件查询$ limit times

  4. 因此我得出结论:更喜欢使用代码段2而不是代码段1,除非我的假设是错误的!


    for ($i = 0; $i <= $limit; $i++) {
        // Some Code A [...]
        // Executed every iteration.
    
        // If condition is met, abort the loop and return $result
        if (condition) {
            return $result;
        }
    
        // Code Segment 1, only executed in last iteration if no abortion happened previously. If-condition checked $limit times!
        if ($i == $limit) {
            // Some Code X [...]
            return $result
        }
    }
    // Code Segment 2, only executed if no abortion happened. At most executed only once!
    // Some Code X [...]
    return $result
    

3 个答案:

答案 0 :(得分:1)

这样的东西?:

$aborted = false;
for ($i = 0; $i <= $limit; $i++) {
    // Code
    if ($condition) {
        // Code
        $aborted = true;
        break;
    } else {
        // Code
    }
}

if ($aborted) {
    // Code
} else {
    // Code
}

return $result;

如果您正在浏览数组(或其他可迭代结构),请使用foreach循环并将“完成循环”代码放在其后面。

答案 1 :(得分:1)

您已经正确地得出结论..由于您已经说过的原因,第2段比第1段效率更高..

我的复杂性方面,在for循环的情况下你有O(n)(其中n = $ limit)和2的incase它是一个常数O(1)..所以是的,第2段是通往去。

答案 2 :(得分:0)

如果在停止循环时使用return,则循环后的第二个块将始终执行,因为return会停止整个函数。

如果你正在使用休息。你可以使用if($ i == $ limit)语句。