* 使用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. Linux下pdf阅读器推荐

    由于需要在pdf文件上做标记,所以自带的文档查看器根本满足了需求,之前去网上查了查,Okular评价挺高,就安装了一个,确实能基本满足我的需求,但是 1.界面感觉还是不太友好,书签栏一直在那. 2.而 ...

  2. bash的变量设置

    1. myname=zhangsan //设置变量 2. echo $myname //显示变量 或者:echo ${myname} 3. myname="my name is $mynam ...

  3. BCE0019: '' is not a member of 'UnityEngine.Component'的问题

    看自学网上的Unity3D的视频,其中视频中的实力代码: n.rigidbody.AddForce(fwd * 28000); 这个代码运行会出现错误: BCE0144: 'UnityEngine.C ...

  4. Manacher算法

    Manacher算法是求回文串最高效的算法,能在线性时间内求出以每一个字符为中心的最长回文串.   首先,我们都能想出$O(N^2)$求出每一个字符为中心的最长回文串的算法.那么我们考虑这样一种情况. ...

  5. mysql导出到ms sql

    导出为ms access数据库,然后在ms sql server管理器中导入就可以了,用csv.sql文件的方式都没成功

  6. jQuery关于隐式迭代的个人理解~

    1.JQuery对象" 如: $('div').text("div展示的信息") 可以看成"是一个包含一个dom数组 和 包含所有Jquery方法的容器 2.每 ...

  7. sql编程小结

    对照mysql5.1手册,对这几天学的sql编程进行小结,主要涉及触发器.存储过程.权限管理.主从分离等,权当抛砖引玉,高手请略过. 一.触发器 通俗的说就是在指定的数据表增删改的前或后触发执行特定的 ...

  8. 9月14日JavaScript循环语句作业解析

    1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 解法一: var gd = 8848; var cs = 0; while(true) { cs++; gd = gd ...

  9. C#----使用WindowsMediaPlayer 同时播放多个声音

    使用Windows Media Player 其实就是使用组件AxWindowsMediaPlayer. 添加两个引用:Interop.WMPLib.dll和AxInterop.WMPLib.dll. ...

  10. ie6下absolute:fixed问题,完美兼容

    普通css代码 .fix_foot{height: 30px; background: #ff0000; position: %; z-index:;} ie6兼容代码 * html,* html b ...