Php foreach references assignment, foreach references assignment
When writing code, it is found that the php foreach reference assignment will lead to unexpected behavior.
Sample Code:
<?php $arr = array('a','b','c'); foreach($arr as $k=>&$v) { } print_r($arr); foreach($arr as $k=>$v) { } print_r($arr); ?>
Output result: Array ([0] => a [1] => B [2] => c) array ([0] => a [1] => B [2] => B) Find the information and find the cause. In fact, after the first foreach ends, the reference of the last element $ v in the array $ arr is still retained. In the second foreach loop, it is actually to assign the second foreach to the third element of the array $ arr for execution. The changes to the array $ arr each time are as follows: the first time: array ([0] => a [1] => B [2] => a) Second Time: array ([0] => a [1] => B [2] => B) Third time: array ([0] => a [1] => B [2] => B. To avoid this situation, you can cancel the reference: unset ($ v) after the first foreach is completed ). However, to avoid unexpected results, use foreach to reference values with caution.