foreach简介
1、数组的循环
对于索引数组,且索引有规律 0 -> N,直接使用for循环即可
结果:
如果数组不是有规律的索引数组,用for循环就会出错
结果:notice错误,根本没有$arr[0]
这就需要使用foreach来对数组进行循环
2、foreach语法
foreach 语法结构提供了遍历数组的简单方式
foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息
有两种语法:
红框中的是关键字,不可更改
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步,因此下一次循环中将会得到下一个单元
第二种格式做同样的事,并且当前单元的键名也会在每次循环中被赋给变量 $key
还能够自定义遍历对象
as是关键字,不能少,如果用第二种语法格式,=> 也是关键字
这里的key和value仅仅是一个名字,也可以用其它
不能用数组和对象作为键(key),这样会报错
foreach不是函数,是语言结构
3、用foreach分别遍历索引数组和关联数组
结果:
把下标也遍历出来
结果:
遍历关联数组
结果:
这个foreach适用范围更广,范围更广指的是适用于各种形式的数组,并不是指可以foreach多种数据类型,仅能用于数组和对象
4、foreach的遍历顺序
如果是索引数组,你会发现遍历出来的顺序并不是按索引大小遍历,而是按添加的顺序,如果按照索引大小遍历,应该使用for,而不是foreach
所以foreach遍历数组的顺序是由元素的添加顺序决定的,不管是索引数组还是关联数组
结果:
5、当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()
怎么来理解这个呢?
结果:
第一个foreach已经把指针移到尾部去了,并且试图努力的往后移动指针,直到移出界(current($arr)返回false),foreach结束
foreach结束后,并没有帮我们把指针初始化,不然current应该返回数组的第一个单元,第二个foreach并没有受第一个foreach的影响,当foreach开始执行时,数组内部的指针会自动指向第一个单元
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。