PHP Pass by Reference in foreach
In PHP, pass by reference allows a function or method to modify the original variable rather than a copy. When used in a foreach loop, it can lead to unexpected behavior if not fully understood.
Explanation of the Output: zero one two two
In the provided code:
$a = array ('zero','one','two', 'three'); foreach ($a as &$v) {} foreach ($a as $v) { echo $v.PHP_EOL; }
The first foreach loop uses pass by reference (&) to modify the array elements directly. This means that when the value of $v is changed, it directly affects the corresponding element in the $a array.
In the first loop, the value of each element is set to null. This is because when no value is assigned in a pass-by-reference loop, the corresponding value in the array is set to null.
In the second loop, the output shows the current value of each element, starting from the modified nullified array. The first three elements maintain their assigned values from the initialization. However, the fourth element ($a[3]) has been set to null in the first loop.
Therefore, the subsequent iterations of the second loop print the original values (zero, one, and two), followed by the null value for $a[3]. In the last iteration, the value of $v is still pointing to the null value of $a[3], which results in 'two' being repeated as the output, as it was the last assigned value before nulling.
The above is the detailed content of Why Does PHP's `foreach` with Pass-by-Reference Produce Unexpected Results?. For more information, please follow other related articles on the PHP Chinese website!