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中使用Akismet防止垃圾评论的代码
Jun 10 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
php常量详细解析
Oct 27 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
PHP变量的作用范围实例讲解
Dec 22 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中截取中文字符串的代码小结
2011/07/17 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
javascript工具库代码
2012/03/29 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
python迭代器的使用方法实例
2013/11/21 Python
Python实现统计单词出现的个数
2015/05/28 Python
python字典的常用操作方法小结
2016/05/16 Python
python实现神经网络感知器算法
2017/12/20 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python中for用来遍历range函数的方法
2018/06/08 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
体育专业自荐书
2014/05/29 职场文书
求职自我评价范文100字
2014/09/23 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书