在foreach循环中每次访问count($ array)会有性能损失吗?

时间:2014-01-25 21:39:36

标签: php arrays performance foreach

我偶然发现了问题“Find the last element of an array while using a foreach loop in PHP”。

comments用户中,“johndodo”声称每次在foreach循环中访问count($ array)都没有性能损失。

  

“[...]在PHP中,每次访问count($ arr)都没有性能损失。原因是项目计数在内部保存为数组头中的特殊字段,并且不计算在-the-飞。[...]“

所以:

foreach ($array as $line) {
    $output .= '    ' . $line;
    // add LF if not the last line
    if ($array[count($array) - 1] != $line) {
        $output .= "\n";
    }
}

应该和以下一样快:

$arrayLen = count($array) - 1;
foreach ($array as $line) {
    $output .= '    ' . $line;
    // add LF if not the last line
    if ($array[$arrayLen] != $line) {
        $output .= "\n";
    }
}

嗯,事实并非如此。在进行性能分析时,可以判断在第一个示例中花费了大量时间来执行count()是因为用户提出的索赔没有实际意义,还是因为我们在紧张的foreach循环中调用了一个函数?

1 个答案:

答案 0 :(得分:1)

“johndodo”正在抓住的是,正如Mark Ba​​ker在评论中很好地指出的那样,数组结构在内部包含一个计数值,因此它不需要遍历每次计算每个元素的数组。

“johndodo”的陈述未能考虑的是调用函数在循环中调用时会产生大量开销。