php foreach 效率,PHP中for和foreach哪个效率高一些?

363b1185d3d930a8d2cb336b902cad9e.png

for和foreach那个效率高?原因是什么?

PHP中for和foreach效率高的是foreach

for循环遍历方法:public function getForTime(){

$big_Array = range(0,1000000,1);

/* for循环遍历数组示例 */

$start_For_Time = $this->microtime_float();

//$array_Count = count($big_Array);

for ($i=0;$i

$i;

}

$end_For_Time = $this->microtime_float();

$for_Time = $end_For_Time - $start_For_Time;

echo 'for循环遍历耗时:'.$for_Time.'
';

}

foreach循环遍历方法:public function getForeachTime(){

$big_Array = range(0,1000000,1);

/* foreach循环遍历数组示例 */

$start_Foreach_Time = $this->microtime_float();

foreach ($big_Array as $key=>$val) {

$key;

}

$end_Foreach_Time = $this->microtime_float();

$foreach_Time = $end_Foreach_Time - $start_Foreach_Time;

echo 'foreach循环遍历耗时:'.$foreach_Time;

}

时间计算方法:/**

* 时间统计函数

*/

private function microtime_float($time = null)

{

list($usec, $sec) = explode(' ', $time ? $time : microtime());

return ((float)$usec + (float)$sec);

}

看一下两种方式耗时/*

* 输出结果:第一种情况:先count在for循环遍历耗时:0.028002023696899 秒

* foreach循环遍历耗时:0.003000020980835 秒

* 第二种情况:在for循环条件中做count遍历耗时:0.095005035400391 秒

* foreach循环遍历耗时:0.0040009021759033 秒

* */

从上面的测试中我们可以明显的得出两条结论:1、for循环遍历的效率是低于foreach循环遍历

2、for循环在外部做count和在条件中做count相比较,第一种效率更高

效率高的原因是什么呢?在寻找这个答案之前我们先探讨原理分别是什么。

for 循环:每次从$i开始,每次循环都需要判断$i是否小于count,这占用了很大一部分时间

小于继续,否则终止循环

foreach:foreach 依赖 IEnumerable.

第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,

以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束.

期间GetList()方法只执行一次.

从上面是分析我们明显可以得出结论:php 的foreach循环效率是大大高于for循环。也许有很大的一个原因是for 要进行很多次条件判断。所以以后能用foreach的地方就用foreach,可以提高1倍的效率。

BUT:事实真的是这样吗?有人会说这个例子已经很明显了啊,结论一目了然,难道还有其他的可能吗?

我觉得事实没这么简单,如果真的是这样,for循环存在的意义是什么呢?

既然foreach效率高于for这么多倍,就直接都用foreach不就行了吗?个人觉得我测试的这个例子有一定的局限性,并不能作为评估两个循环方式效率高低的绝对依据。

不过,对于我们phper来说,正常工作当中还是使用foreach循环遍历比较好,至于编译层是如何工作的没必要涉及太深,如果有兴趣可以深度研究一下。

更多相关知识,请访问 PHP中文网!!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值