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中文分词的简单实现代码分享
Jul 17 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
php有效防止同一用户多次登录
Nov 19 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
tp5框架无刷新分页实现方法分析
Sep 26 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&amp;&amp;mysql)三
2006/10/09 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
Javascript----文件操作
2007/01/18 Javascript
jqgrid 简单学习笔记
2011/05/03 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中的生成器和yield详细介绍
2015/01/09 Python
Python数据结构之单链表详解
2017/09/12 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
装修致歉信
2014/01/15 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
债务纠纷委托书
2014/08/30 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
检讨书之工作不认真
2019/08/14 职场文书
利用JavaScript写一个简单计算器
2021/11/27 Javascript