在一般的开发过程中,我们经常使用foreach来遍历一个数组,并且在遍历中赋值给另外一个数组,之后的操作就都会围绕着这个新的数组来进行。
这主要还是因为一般的foreach的操作是无法直接对原本的数组进行赋值操作,因为涉及到堆栈方面的知识就相当于是复制出来的一个新的数组,并不会对原本的数组的值造成影响,如果需要改变原本数组的值我们就需要用到引用传值了
例:
$a = array('a','b','c');
foreach($a as &$v){}
var_dump($v);
foreach($a as $v){}
var_dump($a);
如果在第一个foreach中对数组的值进行修改,是可以修改成功的,但是倘若在此按照正常的遍历方式遍历就会出现问题。比如第二个数组就会输出a,b,b的数组那么到底为什么会变成这样呢?
其实是在第一次引用传值中,将‘***$v与遍历的最后一个值([2])的对应关系***’保留了下来,既[2] =
v
;
然
后
在
而
二
次
f
o
r
e
a
c
h
中
遍
历
时
与
[
2
]
对
应
的
值
就
变
成
了
a
,
b
,
v; 然后在而二次foreach中遍历时与[2]对应的值就变成了a,b,
v;然后在而二次foreach中遍历时与[2]对应的值就变成了a,b,v.
第一次循环$v为a,数组就是a,b,a,然后规律,a,b,b,最后一次由于值相同还是a,b,b