* 使用foreach遍历数组时要注意的问题:
* 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历
* 2.foreach遍历完成之后,指针是没有指向数组的任何一个元素的,也就是此时数组没有指针指向,所以紧接着使用each遍历时没有元素输出
* 3.foreach与for循环的效率比较:foreach要优于for,因为for需要获得数组的长度通过i++才能遍历,而foreach不需要计算数组长度
* 4.foreach与while+each遍历的效率比较:
*         在对数组进行‘读’操作时:foreach比while+each快
*          在对数组进行‘写’操作时:while+each比froeach快
*          之所以会出现这样的结果,是因为:PHP内核的采用的复制机制是"引用计数,写时复制",
*          也就是说变量的内容在没有改变之前,只计算有多少个变量名指向这块内存空间,在改变时才会真正的复制,并重新进行内存分配
*          总结:foreach可用于读取大量数据,但不适用于读取时对大量数据做修改操作

* 5.foreach与each的区别:
* each遍历数组时,是从当前的数组指针开遍历,相当于next,当数组遍历完成后,
* 和foreach一样,指针已经指向了数组元素的最后一个的下一个,也是就null,数组失去了指针指向
* 但是和froeach不一样的是,each遍历之前,不会重置数组指针,而foreach会,each是对原数组操作,foreach是对拷贝的数组操作
*

* 注意:foreach是对数组的拷贝进行操作,foreach 不支持用“@”来抑制错误信息的能力
*
* 关于"引用计数,写时复制"的参考文章:
* PHP内核探索:写时复制COW机制:http://www.nowamagic.net/librarys/veda/detail/1454

* PHP内核探索:变量的引用与计数规则:http://www.nowamagic.net/librarys/veda/detail/1581
*/

  1. <?php
  2.  
  3. $arr3=array ('bian'=>'编','cheng'=>'程','shi'=>'世','jie'=>'界',1,2,3);
  4.  
  5. $arr2=array (5,4,2,6,1,8);
  6.  
  7. echo '使用 指针函数 遍历循环数组中的值: ';
  8. echo("\n");
  9.  
  10. echo current($arr2)."\n";
  11. $k=0;
  12. while ($k<(count($arr2)-1)) {
  13. $k++;
  14. echo next($arr2)."\n";
  15. }
  16.  
  17. echo '使用 for 遍历循环数组中的值: ';
  18. echo("\n");
  19. for ($i=0; $i <count($arr2) ; $i++) {
  20. echo $arr2[$i]."\n";
  21. }
  22.  
  23. echo '使用 foreach 遍历循环数组中的值: ';
  24. echo("\n");
  25. foreach ($arr2 as $key => $value) {
  26. echo $key."===".$value."\n";
  27. }
  28.  
  29. echo "当前元素:".current($arr2)."\n";
  30. reset($arr2);
  31. echo '使用 while---each 遍历循环数组中的值: ';
  32. echo("\n");
  33. while ($a= each($arr2))
  34. {
  35. //echo $a[0]."===".$a[1]."\n";
  36. echo $a["key"]."===".$a["value"]."\n";
  37. }
  38.  
  39. reset($arr2);
  40. echo '使用 while--list--each 遍历循环数组中的值: ';
  41. echo("\n");
  42. while (list($key,$val)= each($arr2))
  43. {
  44. echo $key."=".$val."\n";
  45. }
  46. //结果>>>:
  47. //使用 指针函数 遍历循环数组中的值:
  48. // 5
  49. // 4
  50. // 2
  51. // 6
  52. // 1
  53. // 8
  54. // 使用 for 遍历循环数组中的值:
  55. // 5
  56. // 4
  57. // 2
  58. // 6
  59. // 1
  60. // 8
  61. // 使用 foreach 遍历循环数组中的值:
  62. // 0===5
  63. // 1===4
  64. // 2===2
  65. // 3===6
  66. // 4===1
  67. // 5===8
  68. // 当前元素:
  69. // 使用 while---each 遍历循环数组中的值:
  70. // 0===5
  71. // 1===4
  72. // 2===2
  73. // 3===6
  74. // 4===1
  75. // 5===8
  76. // 使用 while--list--each 遍历循环数组中的值:
  77. // 0=5
  78. // 1=4
  79. // 2=2
  80. // 3=6
  81. // 4=1
  82. // 5=8
  83. ?>

PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)的更多相关文章

  1. PHP数组循环遍历的四种方式

     1.使用for循环遍历数组     conut($arr);用于统计数组元素的个数.     for循环只能用于遍历,纯索引数组!!!!     如果存在关联数组,count统计时会统计两种数组的总 ...

  2. PHP数组循环遍历的几种方式

    PHP数组循环遍历 1.for循环 <?php //语法 for (init counter; test counter; increment counter) { code to be exe ...

  3. php中的数组遍历的几种方式

    [(重点)数组循环遍历的四种方式]   1.使用for循环遍历数组     conut($arr);用于统计数组元素的个数.     for循环只能用于遍历,纯索引数组!!!!     如果存在关联数 ...

  4. C++ 数组遍历的两种方式

    C++ 数组遍历的两种方式: #include <iostream> using namespace std; int main() { // 一维数组 ] = {, , , , }; / ...

  5. Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)

    示例代码如下: package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date ...

  6. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  7. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

  8. map遍历的四种方式

    原文 http://blog.csdn.net/dayanxuqun/article/details/26348277 以下是map遍历的四种方式: // 一.推荐只用value的时候用,都懂的... ...

  9. java数组的声明由几种方式

    数组的声明由几种方式: 1,String []a = new String[length];再赋值 a[0]=?;....... 2,new完就直接初始化: String []a = new Stri ...

随机推荐

  1. MySQL备份方式简介

    MySQL备份的方式主要分为两种: 文本格式备份: 命令:mysqldump 转储文件:dump file 主要内容:数据库结构及数据(create talbe /insert) 二进制备份:这类备份 ...

  2. C++ 之const Member Functions

    Extraction from C++ primer 5th Edition 7.1.2 The purpose of the const that follows the parameter lis ...

  3. codevs 1432 总数统计

    1432 总数统计 时间限制: 1 s空间限制: 128000 KB题目等级 : 钻石 Diamond   题目描述 Description 给出n个数,统计两两之和小于k的方案数之和. 输入描述 I ...

  4. 重启电脑后,oracle数据库连接不上

    oracle10g安装成功后使用正常,重启电脑后,连接不上了,电脑-服务中各个服务都手动重启了,仍然无效 报错信息:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 要手工去操作命 ...

  5. UpdateSourceTrigger Property in WPF Binding

    介绍 这篇文章我将介绍在WPF和Silverlight中更新绑定源的概念.正如您所知道的,当我们用TwoWay的模式绑定时,任何在目标控件上发生的变化都会影响绑定源的值. 请注意只是在用TwoWay绑 ...

  6. 【Beta版本】冲刺-Day3

    队伍:606notconnected 会议时间:12月11日 目录 一.行与思 二.站立式会议图片 三.燃尽图 四.代码Check-in 一.行与思 张斯巍(433) 今日进展:学习了很多androi ...

  7. 【Alpha阶段】第三次Scrum例会

    会议信息 时间:2016.10.19 21:00 时长:0.5h 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个人任务报告 姓名 今日已完成Issue 明日计划Issue 今日已做事务 工 ...

  8. zoj 3946 Highway Project(最短路 + 优先队列)

    Highway Project Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the emperor of the Marjar ...

  9. HTML中<meta>标签如何正确使用

    HTML中<meta>标签如何正确使用 如果我们在浏览器中按下F12或者Ctrl+shift+J,便可以打开开发者工具,在element中即可看到<head>元素中有不少< ...

  10. 嵌入式Linux系统开发环境搭建

    Linux kernel Complier: http://supportopensource.iteye.com/blog/680483 sudo make mrproper         净化解 ...