PHP数组:在迭代之前存储计数,或每次调用count()?

时间:2016-08-13 06:50:31

标签: php arrays

我真的很好奇......远程使用count($arr)在循环中反复使用,而不是首先存储计数,然后迭代?对性能有何影响?

换句话说,这样做:

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

执行比这更好的事情:

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

我从未注意到性能问题,但我的数组通常相对较小(最多可能是几百个项目)。但对于非常大的数组,无论是在迭代之前存储计数还是每次循环运行时重新计算计数都会有所不同?

3 个答案:

答案 0 :(得分:0)

如果您将计数作为第二种方式count()将在每次迭代中运行。

第一种方式是首选或者像这样:

for($i=0, $count=count($items); $i<$count; $i++)
{
    // ....
}

答案 1 :(得分:0)

我更喜欢使用第一种存储计数的方法,然后在循环中使用该变量。

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

这种方式count()只被调用一次而不是每次迭代。

其次,当您在内部循环中使用count()时,

for($i = 0; $i < count($arr); $i++) { ... }
每次迭代循环时都会调用

count()。因此,如果您的数组包含100个值而不是count(),则将调用100次,在第一种方法中,只调用它一次将计数值返回为100

因此,不是每次都调用它而是一遍又一遍地返回相同的值,所以首选方法是优选的。当你的阵列大小当时大得多时,你会发现两种方法的性能差异。

答案 2 :(得分:0)

它使性能跟踪差异,因为在数组上调用count()具有恒定的时间复杂度。它唯一能产生影响的是你在循环中操作该数组的内容,在这种情况下,数组的大小可能随着每次迭代而改变,这通常不是你想要的。