栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP中FOR与FOREACH的性能

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP中FOR与FOREACH的性能

我个人的观点是在上下文中使用有意义的内容。我个人几乎从未使用

for
过数组遍历。我将其用于其他类型的迭代,但是
foreach
太简单了……在大多数情况下,时间差异将很小。

要注意的最大事情是:

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

这是一个昂贵的循环,因为它在每次迭代中都调用计数。只要您不这样做,我就认为这并不重要…

至于有区别的参考,PHP使用写时复制,因此,如果您不写数组,则循环时的开销相对较小。但是,如果您开始修改数组中的数组,那么您将开始看到它们之间的差异(因为一个人将需要复制整个数组,而引用只能进行内联修改)…

至于迭代器,

foreach
等效于:

$it->rewind();while ($it->valid()) {    $key = $it->key();     // If using the $key => $value syntax    $value = $it->current();    // Contents of loop in here    $it->next();}

至于有更快的迭代方法,这实际上取决于问题。但是我真的要问,为什么?我知道想要提高效率,但我认为您在浪费时间进行微优化。记住

PrematureOptimization Is The Root Of All Evil

编辑: 根据评论,我决定进行快速基准测试…

$a = array();for ($i = 0; $i < 10000; $i++) {    $a[] = $i;}$start = microtime(true);foreach ($a as $k => $v) {    $a[$k] = $v + 1;}echo "Completed in ", microtime(true) - $start, " Secondsn";$start = microtime(true);foreach ($a as $k => &$v) {    $v = $v + 1;}echo "Completed in ", microtime(true) - $start, " Secondsn";$start = microtime(true);foreach ($a as $k => $v) {}echo "Completed in ", microtime(true) - $start, " Secondsn";$start = microtime(true);foreach ($a as $k => &$v) {}    echo "Completed in ", microtime(true) - $start, " Secondsn";

结果:

Completed in 0.0073502063751221 SecondsCompleted in 0.0019769668579102 SecondsCompleted in 0.0011849403381348 SecondsCompleted in 0.00111985206604 Seconds

因此,如果您要在循环中修改数组,则使用引用的速度要快几倍…

而且,仅引用的开销实际上比复制数组要少(这在5.3.2上)…因此(至少在5.3.2上)看起来好像引用的速度明显更快…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号