对比代码先行贴上,有疑问或者有不同见解的希望可以提出,大家共同进步:

//-------------------------------------
$k=0;
$checkTime = ['for'=>0,'while'=>0,'foreach'=>0];
while($k<200){
$arr = range(0,1000000);
$countArr=count($arr);
$begintime = microtime();
for($i=0;$i<$countArr;$i++){
}
$endtime = microtime();
$forTime = ($endtime - $begintime); $begintime = microtime();
$i=0;
while ($i<$countArr){
$i++;
}
$endtime = microtime();
$whileTime = ($endtime-$begintime);
$begintime = microtime();
foreach($arr AS $key=>$val){ }
$endtime = microtime();
$foreachTime= ($endtime-$begintime);
echo 'fortime:'.$forTime.'----whiletime:'.$whileTime.'------foreachtime'.$foreachTime;
$getMinArr = [$forTime,$whileTime,$foreachTime];
$mintime = min($getMinArr);
echo '<br />';
switch($mintime){
case $forTime:
echo 'forTime最慢,运行时间为:'.$mintime;
$checkTime['for']++;
break;
case $whileTime:
echo 'while最慢,运行时间为:'.$mintime;
$checkTime['while']++;
break;
case $foreachTime:
echo 'foreachTime最慢,运行时间为:'.$mintime;
$checkTime['foreach']++;
break;
}
echo '<hr />';
$k++;
}
echo '总结数据:-for最快速度次数:'.$checkTime['for'].';-while最快速度次数:'.$checkTime['while'].';foreach最快速度次数:'.$checkTime['foreach'];
//--------------------------- 说明:创建100万个数组,然后用三个循环来进行对比,最后用毫秒级别时间戳来进行时间差计算。 测试结果部分数据: //----------------
fortime:0.013788----whiletime:0.01336------foreachtime0.021404
while最快,运行时间为:0.01336

fortime:0.013393----whiletime:0.01358------foreachtime0.021356
forTime最快,运行时间为:0.013393

fortime:0.013536----whiletime:0.013592------foreachtime0.022041
forTime最快,运行时间为:0.013536

fortime:0.013753----whiletime:0.014442------foreachtime0.021168
forTime最快,运行时间为:0.013753

fortime:0.013404----whiletime:0.013742------foreachtime0.021407
forTime最快,运行时间为:0.013404

总结数据:-for最快速度次数:88;-while最快速度次数:108;foreach最快速度次数:4
//-----------------
注意:上面我for循环的时候count语句是放在for循环外计算的,很多网上资料都说foreach循环比for快,但是我看了他们的实例,并且运行了他们的实例,实际上问题就是出在for的count放循环中比较
因为使用for的时候,如果count放在里面的话,每次循环都会统计一次,接下来我稍微修改下代码,以所谓foreach比for快的方式,大家对比一下就明白了。 //---------------------
$k=0;
$checkTime = ['for'=>0,'while'=>0,'foreach'=>0];
while($k<200){
$arr = range(0,1000000);
$countArr=count($arr);
$begintime = microtime();
for($i=0;$i<count($arr);$i++){
}
$endtime = microtime();
$forTime = ($endtime - $begintime); $begintime = microtime();
foreach($arr AS $key=>$val){ }
$endtime = microtime();
$foreachTime= ($endtime-$begintime);
echo 'fortime:'.$forTime.'----------foreachtime'.$foreachTime;
$getMinArr = [$forTime,$foreachTime];
$mintime = min($getMinArr);
echo '<br />';
switch($mintime){
case $forTime:
echo 'forTime最慢,运行时间为:'.$mintime;
$checkTime['for']++;
break;
case $foreachTime:
echo 'foreachTime最慢,运行时间为:'.$mintime;
$checkTime['foreach']++;
break;
}
echo '<hr />';
$k++;
}
echo '总结数据:-for最快速度次数:'.$checkTime['for'].';foreach最快速度次数:'.$checkTime['foreach'];
//------------------------
得出数据结果:

这个实例我把count放在for循环里面,所以在速度方面,直线下降了。

所以从这些数据看来,只要你把count放在for外面,在速度方面还是优于foreach的,只是for有很大局限性的,就是对数组结构有要求的,有其他间接的

可以提出来。

												

php测试for/while/foreach循环速度对比的更多相关文章

  1. 【PHP】 foreach循环中变量引用的一道面试题

    $a = array('a','b','c'); foreach($a as &$v){} foreach($a as $v){ } var_dump($a); 现在.不要打开浏览器,猜测一下 ...

  2. PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?

    PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么? 代码如下: <?php $arr = array('one','two','three'); fo ...

  3. 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException

    摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素. 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体 ...

  4. for循环和foreach循环遍历集合的效率比较

    先上代码 package com.test; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...

  5. 为什么禁止在 foreach 循环里进行元素的 remove/add 操作

    首先看下边一个例子,展示了正确的做法和错误的错发: 这是为什么呢,具体原因下面进行详细说明: 1.foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数 ...

  6. Java for循环和foreach循环的性能比较

    就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在什么时候使用这两种循环了? 两种循环的语法格式: 普通for循环语法: for (int i = 0; i ...

  7. 有关集合的foreach循环里的add/remove

    转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...

  8. JavaScript数组forEach循环

    JavaScript数组forEach循环 今天写JavaScript代码把forEach循环数组忘记写法了,在此记录一下以防止未来忘记. let a = [1, 2, 3]; a.forEach(f ...

  9. C# Foreach循环本质与枚举器

    对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很多人和我一样都没有去深究.刚回顾泛型讲到枚举器让我联想到了Foreach的实现,所以进行一番探究,有什么不对或者错误的地方大家多 ...

随机推荐

  1. Core dump去哪里了?

    转自:http://blog.csdn.net/normallife/article/details/53818997 今天程序Crash,去追踪,找core dump,始终没有找到,后来到了/pro ...

  2. 【iCore1S 双核心板_FPGA】例程十六:基于SPI的ARM与FPGA通信实验

    实验现象: 核心代码: int main(void) { int i,n; ]; ]; HAL_Init(); system_clock.initialize(); led.initialize(); ...

  3. 前端异常监控 - BadJS

    前端异常监控 - BadJS 简介:BadJS 是 web 前端异常监控解决方案,提供一种 web 页面的脚本错误监控.上报.统计.查看等系统化的跟踪解决方案.目前BadJS覆盖了腾讯课堂.公众号.邮 ...

  4. 线程安全的ConcurrentQueue<T>队列

    队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. ConcurrentQueue< ...

  5. 在Android Studio中查看Sqlite的方法

    只说最好的方法,使用工具stetho:http://facebook.github.io/stetho/ 1.在Gragle中加上如下语句: dependencies { // Stetho core ...

  6. lua_tinker源码笔记1

    本篇仅简单介绍使用lua_tinker让lua调用C++函数的过程, C++调用lua函数可以参见博客Lua脚本和C++交互(一). 未完待续. (一) lua调用C++全局函数 这里以lua_tin ...

  7. LeetCode - 386. Lexicographical Numbers

    Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,1 ...

  8. C#模拟登录后请求查询

    需求是这样子的,想开发一个外挂程序,能够抓取别的系统的数据,从而实现数据验证. 比如这样一个界面: 使用Chrome浏览器分析http请求和响应过程以及页面的html代码,发现这是一个ajax请求,于 ...

  9. web初级开发的那些坑

    1.在使用js原生的XMLHttpRequest加载.xml文件时,老是不对,按照书上的写的没错,后来才发现是我的web.xml文件中阻止了.xml文件的加载. 2.有关于string解析成json数 ...

  10. mysql中的schema 等价于database,相当于一个数据库

    MySQL 中 Schema 等价于 数据库. mysql> SELECT -> SCHEMA_NAME, -> DEFAULT_CHARACTER_SET_NAME, -> ...