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在XP下IIS和Apache2服务器上的安装
Sep 05 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
两款万能的php分页类
Nov 12 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
基于php实现的验证码小程序
Dec 13 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
php base64 编码与解码实例代码
Mar 21 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 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代码
2012/06/08 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
分析JS中this引发的bug
2017/12/12 Javascript
vue的mixins属性详解
2018/03/14 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
大学新生欢迎词
2014/01/10 职场文书
应届毕业生自荐书
2014/06/18 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
博士给导师的自荐信
2015/03/06 职场文书
校车安全管理责任书
2015/05/11 职场文书
爱国教育主题班会
2015/08/14 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript