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 不错的学习资料
Feb 06 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
php访问对象中的成员的实例方法
Nov 17 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
python统计文本文件内单词数量的方法
2015/05/30 Python
python学习 流程控制语句详解
2016/06/01 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
python制作朋友圈九宫格图片
2019/11/03 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
Django URL参数Template反向解析
2020/11/24 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
简历自荐信
2013/12/02 职场文书
大学生旷课检讨书
2014/01/22 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
给校长的建议书200字
2014/05/16 职场文书
项目合作协议书
2014/09/23 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python