php测试for/while/foreach循环速度对比
对比代码先行贴上,有疑问或者有不同见解的希望可以提出,大家共同进步:
//-------------------------------------
$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循环速度对比的更多相关文章
- 【PHP】 foreach循环中变量引用的一道面试题
$a = array('a','b','c'); foreach($a as &$v){} foreach($a as $v){ } var_dump($a); 现在.不要打开浏览器,猜测一下 ...
- PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?
PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么? 代码如下: <?php $arr = array('one','two','three'); fo ...
- 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException
摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素. 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体 ...
- for循环和foreach循环遍历集合的效率比较
先上代码 package com.test; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...
- 为什么禁止在 foreach 循环里进行元素的 remove/add 操作
首先看下边一个例子,展示了正确的做法和错误的错发: 这是为什么呢,具体原因下面进行详细说明: 1.foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数 ...
- Java for循环和foreach循环的性能比较
就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在什么时候使用这两种循环了? 两种循环的语法格式: 普通for循环语法: for (int i = 0; i ...
- 有关集合的foreach循环里的add/remove
转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...
- JavaScript数组forEach循环
JavaScript数组forEach循环 今天写JavaScript代码把forEach循环数组忘记写法了,在此记录一下以防止未来忘记. let a = [1, 2, 3]; a.forEach(f ...
- C# Foreach循环本质与枚举器
对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很多人和我一样都没有去深究.刚回顾泛型讲到枚举器让我联想到了Foreach的实现,所以进行一番探究,有什么不对或者错误的地方大家多 ...
随机推荐
- d3实现的力向导图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Pitch detection algorithm(基音搜索算法)PDA相关链接
第一:维基百科 http://en.wikipedia.org/wiki/Pitch_estimation 简要系统介绍了基音估计算法的分类和一些链接,论文 第二:http://ws2.bingham ...
- Android Launcher分析和修改1——Launcher默认界面配置(default_workspace)
最近工作都在修改Launcher,所以打算把分析源码和修改源码的过程记录下来,最近会写一些关于Launcher的分析和修改博文.因为我是修改4.0.3的Launcher,所以后面文章里面的Launch ...
- <我的股票交易知识汇总与个人感悟_v1.0 (By geman)>
书在这里 一个完整的股票交易包括选股.买股.持股.卖股四个阶段. 右侧交易,顶是跌出来的,底是涨出来的 一定要敢于止损,设好止损位,严格执行,即使踏空也无怨无悔:资金安全第一位 坚持只买处于上升通道的 ...
- 阿里巴巴面试之利用两个int值实现读写锁
首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资 ...
- HAVANA 团队简介
在Ensembl 下载的gtf 文件中,会有一部分来源自 HAVANA havana 的全称叫做 human and vertebrate analysis and annotation, 是sag ...
- SpringBoot 拦截器(Interceptor)的使用
拦截器intercprot 和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...
- Python 中的map、reduce函数用法
#-*- coding:UTF-8 -*- #map()函数接受两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回 def f(x): retu ...
- Java 正则表达式详细使用
Java 正则表达式 java.util.regex.Pattern java.util.regex.Matcher 1.Matchmatch 是从字符串最头部开始匹配,一直到结束,需要匹配整个串 S ...
- Python2.7字符编码详解
目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...