- foreach 也是正常的语法循环结构,可以有 break 和 continue 等操作
- 遍历过程中值变量传递默认是值传递

输出结果为:

- 遍历过程中值变量可以认为设定为引用传递:foreach($数组名 as $key => & $value){...}
见演示

输出结果为:

这里需要注意的是:值变量$value可以使用引用传递,但是$key不可以使用引用传递,如果使用则会报错。
- foreach 默认是原数组上进行遍历,但是如果在遍历过程中进行了某种修改或某种指针操作,则会复制数组后在复制后的数组继续遍历循环(原数组保持不变)
以下演示foreach默认是在原数组上进行遍历的效果:

可见,此时数组的指针因为遍历中途退出,就停在了第三项。
然后继续演示在某些情况下(修改或指针错作),不是在原数组上进行遍历

- foreach中如果值变量是引用传递,则无论如何都是在修改后的数组上进行

php foreach 遍历细节探讨
原文:http://www.cnblogs.com/bc8web/p/5609871.html