改进PHP'for'循环

sim*_*Pod 24 php performance for-loop

使用典型for循环时,PHPStorm建议更改它以获得更好的性能.我真的不明白这个建议.我该怎么改变它?

PHPStorm的建议

Daa*_*aan 57

for($i = 0; $i <= count($data); $i++){}

在每个迭代的这个例子中,它必须count($data)再次.

for($i = 0, $iMax = count($data); $i <= $iMax; $i++){}

在这个例子中,它只需要count($data)一次.

这就是区别.

  • @abligh如果`$ data`改变了for循环中的长度,你可能不应该首先使用for循环.我可能有偏见,我认为你不应该使用for循环. (4认同)
  • 据推测,这假设`$ data`不会改变循环内部的长度,或者两者会有所不同. (2认同)

Mar*_*ker 13

如果你执行循环count()内部for,那么每次迭代都会执行它,并且调用函数是一个性能开销.

相反,如果你count()for循环之前调用并将结果赋值给变量,那么与for循环中的变量进行比较,你就不会有函数调用开销,所以它更快


gab*_*886 12

通过以您的方式进行循环,每次迭代都需要进行评估count($data).如果列表中有很多项目,可能需要一段时间(相对)来计算这些项目,并且每次都必须这样做.

它潜水的提示是在开始时将变量设置为count($ data)的值,然后使用该变量作为循环限制,当它仅被评估一次时.

这可以通过两种方式完成:

$loopMax = count($data);
for ($i = 0; $i <= $loopMax; $i++) {
    // Your code here
}
Run Code Online (Sandbox Code Playgroud)

要么

for ($i=0, $loopMax = count($data); $i <= $loopMax; $i++) {
    // your code here
}
Run Code Online (Sandbox Code Playgroud)