PHP for 循环与带范围的 foreach

标签 php arrays loops for-loop foreach

<分区>

其中哪一个对性能和可读性更好?

foreach(range(0,10000) as $i) {} // 3.847 ms

for($i = 0; $i < 10000; ++$i) {} // 0.663 ms

编辑:做了一个基准测试,最后一个快了将近 6 倍。

最佳答案

传统的 for 循环比 foreach + range 更快。第一个仅使用整数比较和递增,而最后一个必须创建一个(可能很大)数组,然后通过移动内部数组游标并检查是否到达末尾来提取每个元素。

如果你执行这个你可以看到普通的 forforeach + range 快两倍:

$t0 = microtime(true);
for ($i = 0; $i < 100000; $i++) {
}
echo 'for loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

$t0 = microtime(true);
foreach (range(0, 100000) as $i) {
}
echo 'foreach + range loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

在需要迭代给定次数的情况下,最好使用传统的 for 作为习惯,但最终在大多数情况下您不会看到很大的性能提升(考虑到上面的例子迭代了100k次,如果减少迭代次数,差异会更小)。

关于PHP for 循环与带范围的 foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929468/

相关文章:

Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误

php - 用于解析输入到数据库中的 CSV 文件的嵌套 php 循环 - SQL 插入语句在任意周期失败

Javascript 进度仅在第二个表单提交后才有效

php - 如何保持 PHP 'View Source' html 输出干净

c - 使用指针交换两个数组

java - 在java中填充数组

javascript - 使用两个提交按钮提交两个 jQuery ajax 表单

php - 查询以在后端使用以检索最近发送日期小于或等于某个日期的所有联系人

Python:将初始 numpy 数组分配给另一个变量,更改新变量的几个元素会更改初始 numpy 数组

loops - Vuejs v-for 使用 Array.prototype.reverse() 的无限更新循环