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脚本的10个技巧(1)
Oct 09 PHP
如何使用PHP往windows中添加用户
Dec 06 PHP
php 方便水印和缩略图的图形类
May 21 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
php比较相似字符串的方法
Jun 05 PHP
php异常处理方法实例汇总
Jun 24 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
yii2实现分页,带搜索的分页功能示例
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
改变Apache端口等配置修改方法
2008/06/05 PHP
php 表单验证实现代码
2009/03/10 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
smarty中post用法实例
2014/11/28 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
javascript FormatNumber函数实现方法
2008/12/30 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python实现线程池的方法
2015/06/30 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
土地租赁意向书
2014/07/30 职场文书
幸福来敲门观后感
2015/06/04 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL