Why does PHP overwrite values when I iterate through this array twice (by reference, by value)
        Posted  
        
            by jeremy
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by jeremy
        
        
        
        Published on 2010-04-15T13:10:53Z
        Indexed on 
            2010/04/15
            13:13 UTC
        
        
        Read the original article
        Hit count: 329
        
If I iterate through an array twice, once by reference and then by value, PHP will overwrite the last value in the array if I use the same variable name for each loop. This is best illustrated through an example:
$array = range(1,5);
foreach($array as &$element)
{
  $element *= 2;
}
print_r($array);
foreach($array as $element) { }
print_r($array);
Output:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 8 )
Note that I am not looking for a fix, I am looking to understand why this is happening. Also note that it does not happen if the variable names in each loop are not each called $element, so I'm guessing it has to do with $element still being in scope and a reference after the end of the first loop.
© Stack Overflow or respective owner