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版(1)
Oct 09 PHP
发布一个用PHP fsockopen写的HTTP下载的类
Feb 22 PHP
一个PHP的String类代码
Apr 20 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
thinkphp跨库操作的简单代码实例
Sep 22 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
浅谈laravel中的关联查询with的问题
Oct 10 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
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
php微信开发之关注事件
2018/06/14 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
js字符串完全替换函数分享
2014/12/03 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
python字符串对其居中显示的方法
2015/07/11 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
优秀村官事迹材料
2014/01/10 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
中式婚礼主持词
2014/03/13 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
三严三实学习心得体会
2014/10/13 职场文书
先进工作者个人总结
2015/02/15 职场文书
中学生逃课检讨书
2015/02/17 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS