![75fd9614aac12117a7074388052c184e.png](https://i-blog.csdnimg.cn/blog_migrate/1db5321d60505f10aae3cbe11aed639e.jpeg)
俗话说的好:从哪里跌倒就从哪里爬起来。想当初,在JavaScript中学了foreach之后,我对它的了解仅局限于“循环遍历”这四个字。在php中再次见到它,我竟然觉得恍若隔世。所以这篇文章我想来写写PHP和JS中的foreach。
一、JavaScript中的foreach
JavaScript 提供了很多个内置对象:Math/Array/Number/String/Boolean等,这些内置对象是带有属性和方法的特殊数据类型。
其中,Array(数组)对象有一个方法forEach,它可以为数组中的每个元素调用定义的回调函数,即对数组中的每个元素执行一次提供的函数。
在JS中,提到数组的循环遍历,最先想到的应该是for循环,即for(var i=0;i<arr.length;i++)这样的方式,也可以用更简便的forEach。示例如下:
<!DOCTYPE html>
此时,浏览器界面上展示循环遍历的结果:
![8a3560de3f4362790c52b9cfd38780f2.png](https://i-blog.csdnimg.cn/blog_migrate/fc83493212fa6f3131172965a8466039.png)
在以上的示例中,arr中的元素依次被放入函数中执行输出,实现了数组的循环遍历。
二、PHP中的foreach
1、PHP中的foreach
php 4 引入了 foreach 结构,这只是一种遍历数组简便方法。foreach 仅能用于数组,有以下两种语法:
用法一:
foreach ($arr as $value) statement
第一种格式遍历给定的 arr 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
用法二:
foreach ($arr as $key => $value) statement
第二种格式与第一种作用相同,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
示例如下:
用法一:
<?
代码运行结果:
![79412689e19896e8c6346f7aefdd3077.png](https://i-blog.csdnimg.cn/blog_migrate/b5dddba5808d483f44537da0cf12bca8.png)
用法二:
<?
代码运行结果:
![42b54c66246ca5db9b319c09940b4e19.png](https://i-blog.csdnimg.cn/blog_migrate/66d2fbd4cce26b6a8160b196031f4f23.png)
代码执行过程:
1.对所要遍历的数组指针进行重置。
2.获取指针当前所指向的元素的键名与键,并将键名与键值赋值给 $key,与 $value 变量。同时将指针下移一行。
3.重复的进行读取,下移指针的动作。
4.当没有元素可以读取时,会自动结束。
自 php 5 起,还可能遍历对象。在 php 5 中,当 foreach 开始执行时,数组内部的指针会自动指向第一个单元,即在以上两段代码中,不需要执行 reset($arr) 来重置指针的指向。
自 php 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。
示例如下:
<?
代码运行结果:
![e0853233ff7b787b92dc6c5ae4b3f01a.png](https://i-blog.csdnimg.cn/blog_migrate/07d86545cf3b86d6ea82df9f3729df6a.png)
2、数组中的指针操作
在PHP的foreach循环遍历中,提到了指针。
php中提供了一套函数,这套函数专用于通过数组的指针来操作数组。
数组在内存中有一个数组指针与之相关,默认这个指针位于第1个元素上。这个指针可以通过php的指针函数来操作。
如下:
key → 获取指针当前所指向元素的键名。
current → 获取指针当前所指向元素的键值。
next → 将指针下移一个元素
prev → 将指针上移一个元素
reset → 将指针重置(回到第1个元素)
示例如下:
<?
代码运行结果:
![7b2eca395fba387dce38130a6d6ee227.png](https://i-blog.csdnimg.cn/blog_migrate/905d4710a57158718f7fc563a991753b.png)