foreach简介
1、数组的循环
对于索引数组,且索引有规律 0 -> N,直接使用for循环即可

clipboard.png

结果:

clipboard.png

如果数组不是有规律的索引数组,用for循环就会出错

clipboard.png

结果:notice错误,根本没有$arr[0]
这就需要使用foreach来对数组进行循环

2、foreach语法
foreach 语法结构提供了遍历数组的简单方式
foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息

有两种语法:

clipboard.png

红框中的是关键字,不可更改
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步,因此下一次循环中将会得到下一个单元
第二种格式做同样的事,并且当前单元的键名也会在每次循环中被赋给变量 $key
还能够自定义遍历对象
as是关键字,不能少,如果用第二种语法格式,=> 也是关键字
这里的key和value仅仅是一个名字,也可以用其它
不能用数组和对象作为键(key),这样会报错
foreach不是函数,是语言结构

3、用foreach分别遍历索引数组和关联数组

clipboard.png

结果:

clipboard.png

把下标也遍历出来

clipboard.png

结果:

clipboard.png

遍历关联数组

clipboard.png

结果:

clipboard.png

这个foreach适用范围更广,范围更广指的是适用于各种形式的数组,并不是指可以foreach多种数据类型,仅能用于数组和对象

4、foreach的遍历顺序
如果是索引数组,你会发现遍历出来的顺序并不是按索引大小遍历,而是按添加的顺序,如果按照索引大小遍历,应该使用for,而不是foreach
所以foreach遍历数组的顺序是由元素的添加顺序决定的,不管是索引数组还是关联数组

clipboard.png

结果:

clipboard.png

5、当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()
怎么来理解这个呢?

clipboard.png

结果:

clipboard.png

第一个foreach已经把指针移到尾部去了,并且试图努力的往后移动指针,直到移出界(current($arr)返回false),foreach结束
foreach结束后,并没有帮我们把指针初始化,不然current应该返回数组的第一个单元,第二个foreach并没有受第一个foreach的影响,当foreach开始执行时,数组内部的指针会自动指向第一个单元


web360
838 声望28 粉丝

大家都是凡人,难道你确定你是大神?


引用和评论

1 篇内容引用
0 条评论