* 使用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
*/

<?php

    $arr3=array ('bian'=>'编','cheng'=>'程','shi'=>'世','jie'=>'界',1,2,3);

    $arr2=array (5,4,2,6,1,8);

    echo '使用 指针函数 遍历循环数组中的值: ';
echo("\n"); echo current($arr2)."\n";
$k=0;
while ($k<(count($arr2)-1)) {
$k++;
echo next($arr2)."\n";
} echo '使用 for 遍历循环数组中的值: ';
echo("\n");
for ($i=0; $i <count($arr2) ; $i++) {
echo $arr2[$i]."\n";
} echo '使用 foreach 遍历循环数组中的值: ';
echo("\n");
foreach ($arr2 as $key => $value) {
echo $key."===".$value."\n";
} echo "当前元素:".current($arr2)."\n";
reset($arr2);
echo '使用 while---each 遍历循环数组中的值: ';
echo("\n");
while ($a= each($arr2))
{
//echo $a[0]."===".$a[1]."\n";
echo $a["key"]."===".$a["value"]."\n";
} reset($arr2);
echo '使用 while--list--each 遍历循环数组中的值: ';
echo("\n");
while (list($key,$val)= each($arr2))
{
echo $key."=".$val."\n";
}
//结果>>>:
//使用 指针函数 遍历循环数组中的值:
// 5
// 4
// 2
// 6
// 1
// 8
// 使用 for 遍历循环数组中的值:
// 5
// 4
// 2
// 6
// 1
// 8
// 使用 foreach 遍历循环数组中的值:
// 0===5
// 1===4
// 2===2
// 3===6
// 4===1
// 5===8
// 当前元素:
// 使用 while---each 遍历循环数组中的值:
// 0===5
// 1===4
// 2===2
// 3===6
// 4===1
// 5===8
// 使用 while--list--each 遍历循环数组中的值:
// 0=5
// 1=4
// 2=2
// 3=6
// 4=1
// 5=8
?>

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. sersync2 安装,配置

    介绍 rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息.rsync是用 “ ...

  2. 如何自己编写一个easyui插件续

    接着如何自己编写一个easyui插件继续分享一下如何从上一节写的“hello”插件继承出一个“hello2”. 参考了combobox的源码中继承combo,当然我这个简单很多了.都是根据自己的理解来 ...

  3. 基本概率分布Basic Concept of Probability Distributions 2: Poisson Distribution

    PDF version PMF A discrete random variable $X$ is said to have a Poisson distribution with parameter ...

  4. 为你解惑之WPF经典9问详解

    本文解答了关于WPF的9个最常见的问题.从某种意义上讲,这两种技术是相互关联的:它们都是关于界面表现的技术,更进一步的,Silverlight是基于WPF的,是它的一个子集.不仅从理论上介绍了这两种技 ...

  5. xml小记1

    xml小记1 关于边框的实现 这是一个比较简单的东西,但是今天莫名的低效率,在这上面花了比较多的时间.之前有咨询过同学如何实现单向的边框,他们采用的方法是调用别人的接口. 我采用的方法如下: < ...

  6. CSS--值和单位

    等价颜色表 什么叫Web安全色 所谓的“web安全”颜色是指在256色计算机系统上总能避免抖动的颜色. Web安全颜色可以表示为RGB值为20%和51(相应的十六进制值为33)的倍数. 如果使用RGB ...

  7. WinForm------TextEdit控件内容字体变*号

    "属性" -> “Properties” -> “LookAndFeel” -> “PasswordChar”

  8. e_msg_c_as_register_req-注册存储过程

    TOP:BEGIN #Routine body goes here... IF EXISTS ( SELECT * FROM `global_account` WHERE `plantform_id` ...

  9. 9月20日下午JavaScript函数--递归

    例题1:公园里有200个桃子,猴子每天吃掉一半以后扔掉一个,问6天以后还剩余多少桃子? var sum = 200; for(var i= 0;i<6;i++) { sum = parseInt ...

  10. JSP 自定义标签

    0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...