众所周知,foreach用于对数组的遍历,但是,在foreach($arr as $value)中,$value只是原值的一个副本,因此如果在foreach里进行该数值的修改,是不会影响到源数组的。
例:
<?php $colors= array('red','blue','green','yellow'); foreach ($colors as $color){ $color = "xxxx"; } foreach ($colors as $color){ echo $color."<br></br>"; } ?>
在上例中,第一个foreach循环并没有修改到$colors这个数组,所以在第二个foreach循环的时候还是输出:
red
blue
green
yellow
如何使得foreach($arr as $value)中的$value不是一个副本而可以在foreach循环中进行原数值的修改呢?
其实很简单,将其改为foreach ($arr as &$value),即在$value前添加取地址符。
还需要注意的是,当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。