PHP遍历数组的三种方法及效率对比分析


Posted in PHP onFebruary 12, 2015

本文实例分析了PHP遍历数组的三种方法及效率对比。分享给大家供大家参考。具体分析如下:

今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个。顺便写个文章总结下,如果总结不全还请朋友们指出

第一、foreach()

foreach()是一个用来遍历数组中数据的最简单有效的方法。

<?php 
    $urls= array('aaa','bbb','ccc','ddd');
    foreach ($urls as $url){ 
      echo "This Site url is $url! <br />";
    } 
?>

显示结果:

This Site url is aaa 
This Site url is bbb 
This Site url is ccc 
This Site url is ddd

第二、while() 和 list(),each()配合使用。

<?php 
    $urls= array('aaa','bbb','ccc','ddd'); 
    while(list($key,$val)= each($urls)) { 
      echo "This Site url is $val.<br />"; 
    } 
?>

显示结果:

This Site url is aaa
This Site url is bbb
This Site url is ccc
This Site url is ddd

第三、for()运用for遍历数组

<?php 
    $urls= array('aaa','bbb','ccc','ddd'); 
    for ($i= 0;$i< count($urls); $i++){ 
      $str= $urls[$i]; 
      echo "This Site url is $str.<br />"; 
    } 
?>

显示结果:

This Site url is aaa 
This Site url is bbb 
This Site url is ccc 
This Site url is ddd

有时候有人也在问这几种遍历数组的方法哪个更快捷些呢,下面做个简单的测试就明白了

下面来测试三种遍历数组的速度

一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间。

<?php 
  $arr= array(); 
  for($i= 0; $i< 50000; $i++){ 
  $arr[]= $i*rand(1000,9999); 
  } 
  function GetRunTime() 
  { 
  list($usec,$sec)=explode(" ",microtime()); 
  return ((float)$usec+(float)$sec); 
  } 
  ###################################### 
  $time_start= GetRunTime(); 
  for($i= 0; $i< count($arr); $i++){ 
  $str= $arr[$i]; 
  } 
  $time_end= GetRunTime(); 
  $time_used= $time_end- $time_start; 
  echo 'Used time of for:'.round($time_used, 7).'(s)<br /><br />'; 
  unset($str, $time_start, $time_end, $time_used); 
  ###################################### 
  $time_start= GetRunTime(); 
  while(list($key, $val)= each($arr)){ 
  $str= $val; 
  } 
  $time_end= GetRunTime(); 
  $time_used= $time_end- $time_start; 
  echo 'Used time of while:'.round($time_used, 7).'(s)<br /><br />'; 
  unset($str, $key, $val, $time_start, $time_end, $time_used); 
  ###################################### 
  $time_start= GetRunTime(); 
  foreach($arr as$key=> $val){ 
  $str= $val; 
  } 
  $time_end= GetRunTime(); 
  $time_used= $time_end- $time_start; 
  echo 'Used time of foreach:'.round($time_used, 7).'(s)<br /><br />'; 
?>

测试结果:

Used time of for:0.0228429(s) 
Used time of while:0.0544658(s) 
Used time of foreach:0.0085628(s)

经过反复多次测试,结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。从原理上来看,foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。原因应该是,foreach是PHP内部实现,而while是通用的循环结构。所以,在通常应用中foreach简单,而且效率高。在PHP5下,foreach还可以遍历类的属性。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
php增删改查示例自己写的demo
Sep 04 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 PHP
PHP 裁剪图片
Mar 09 PHP
PHP进程同步代码实例
Feb 12 #PHP
PHP CURL 内存泄露问题解决方法
Feb 12 #PHP
PHP中捕获超时事件的方法实例
Feb 12 #PHP
php单例模式示例分享
Feb 12 #PHP
PHP 正则表达式小结
Feb 12 #PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 #PHP
PHP动态输出JavaScript代码实例
Feb 12 #PHP
You might like
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
php实现zip文件解压操作
2015/11/03 PHP
js 操作select相关方法函数
2009/12/06 Javascript
JavaScript中获取元素索引的函数
2010/09/10 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
基于vue.js实现的分页
2018/03/13 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python 实现多线程下载视频的代码
2019/11/15 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
安全生产月宣传标语
2014/10/06 职场文书
2014年评职称工作总结
2014/11/20 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL