PHP能够在循环内缓存计数调用吗?
我知道使用数组上的循环更有效的方法是foreach,或者将count存储在变量中以避免多次调用它。 但我很好奇PHP是否有一些“缓存”功能,比如:PHP能够在循环内缓存计数调用吗?,php,Php,我知道使用数组上的循环更有效的方法是foreach,或者将count存储在变量中以避免多次调用它。 但我很好奇PHP是否有一些“缓存”功能,比如: for ($i=0; $i<count($myarray); $i++) { /* ... */ } for($i=0;$iPHP完全按照您的指示执行。数组的长度在循环中可能会发生变化,因此您在每次迭代中调用count可能是有意的。PHP不会试图推断您在这里的意思,也不应该这样做。因此,执行此操作的标准方法是: for ($i = 0, $l
for ($i=0; $i<count($myarray); $i++) { /* ... */ }
for($i=0;$iPHP完全按照您的指示执行。数组的长度在循环中可能会发生变化,因此您在每次迭代中调用count
可能是有意的。PHP不会试图推断您在这里的意思,也不应该这样做。因此,执行此操作的标准方法是:
for ($i = 0, $length = count($myarray); $i < $length; $i++)
for($i=0,$length=count($myarray);$i<$length;$i++)
每次循环迭代时,PHP都会执行计数。然而,PHP确实会对数组的大小进行内部跟踪,因此计数是一个相对便宜的操作。PHP并不是真的在对数组中的每个元素进行计数。但它仍然不是免费的
使用一个非常简单的1000万项数组执行一个简单的变量增量,循环内计数版本得到2.5秒,循环前计数得到0.9秒。这是一个相当大的差异,但不是“巨大的”
编辑:代码:
$x = range(1, 10000000);
$z = 0;
$start = microtime(true);
for ($i = 0; $i < count($x); $i++) {
$z++;
}
$end = microtime(true); // $end - $start = 2.5047581195831
$x=范围(1100000);
$z=0;
$start=microtime(真);
对于($i=0;$i
转行
$count = count($x);
for ($i = 0; $i < $count; $i++) {
$count=count($x);
对于($i=0;$i<$count;$i++){
除此之外,其他一切都是一样的,时间是0.96466398239136PHP是一种命令式语言,这意味着它不应该优化掉任何可能产生任何效果的东西。考虑到它也是一种解释性语言,即使有人真的想要,也无法安全地完成
另外,如果您只是想在数组上进行迭代,那么您确实需要使用foreach。在这种情况下,不仅要复制计数,还要复制整个数组(您可以根据需要修改原始数组)。或者您可以使用foreach($arras&$el){$el=…};unset($el)就地修改它;
。我的意思是,PHP(和任何其他语言一样)通常为您的原始问题(如果您有)提供更好的解决方案.特别是考虑到这样大小的数组。这很好,尽管我更喜欢在循环控制结构之外初始化$length,以防我需要在代码中的其他地方引用它。@Mike取决于用途。如果$length
仅在循环中使用,则将其放入循环初始化中更为惯用c、 如果你在别处明确需要它,你应该在循环之外初始化它。我不同意整个数组会被复制,因为PHP是一种写时复制语言。
$count = count($x);
for ($i = 0; $i < $count; $i++) {