我偶然发现了问题“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循环中调用了一个函数?
答案 0 :(得分:1)
“johndodo”正在抓住的是,正如Mark Baker在评论中很好地指出的那样,数组结构在内部包含一个计数值,因此它不需要遍历每次计算每个元素的数组。
“johndodo”的陈述未能考虑的是调用函数在循环中调用时会产生大量开销。