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 相关文章推荐
php5 pdo新改动加载注意事项
Sep 11 PHP
php获取操作系统语言代码
Nov 04 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
php实现cookie加密的方法
Mar 10 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php解析url的三个示例
2014/01/20 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
使用python解析xml成对应的html示例分享
2014/04/02 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python中按值来获取指定的键
2019/03/04 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python实现PID算法及测试的例子
2019/08/08 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
酒店执行总经理岗位职责
2013/12/15 职场文书
运动会广播稿60字
2014/01/15 职场文书
个人公开承诺书
2014/03/28 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
考试作弊检讨
2015/01/27 职场文书
党员年终个人总结
2015/02/14 职场文书
护理自荐信
2019/05/14 职场文书
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android