PHP遍历数组的方法汇总


Posted in PHP onApril 30, 2015

今天有个朋友问我一个问题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类中Static方法效率测试代码
Oct 17 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
php实现复制移动文件的方法
Jul 29 PHP
PHP常用的排序和查找算法
Aug 06 PHP
浅谈php中变量的数据类型判断函数
Mar 04 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 #PHP
PHP实现根据银行卡号判断银行
Apr 29 #PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 #PHP
php实现中文字符截取防乱码方法汇总
Apr 29 #PHP
WIN8.1下搭建PHP5.6环境
Apr 29 #PHP
php筛选不存在的图片资源
Apr 28 #PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 #PHP
You might like
劣质的PHP代码简化
2010/02/08 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
python如何实现代码检查
2019/06/28 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
python微信公众号开发简单流程实现
2020/03/09 Python
详解python metaclass(元类)
2020/08/13 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
存储过程的优点有哪些
2012/09/27 面试题
导游实习生自荐书
2014/01/28 职场文书
搞笑获奖感言
2014/01/30 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS