Re: bug when using foreach with references?
| From: | Richard K Miller | Date: | Thu, 22 Oct 2009 02:01:40 +0000 |
| Subject: | Re: bug when using foreach with references? | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-45864@lists.php.net to get a copy of this message | ||
Hi Jill,
The last element of $items is 'carrot'. Why does it print apple, banana, banana? It sounds like you're saying that $item should be left with the value 'carrot', which makes sense, but why would the original array be modified? (These are empty foreach loops.)<?php $items = array('apple', 'banana', 'carrot'); print_r($items); foreach ($items as &$item) { }$item is now a reference to the last element of $items.print_r($items); foreach ($items as $item) { }And here, the foreach loop writes to $item for each element: thus assiging that value to the last element of $items.
print_r($items); ?> // Output: Array (You can fix your bug by using 'unset($item);' after the second foreach-loop.[0] => apple [1] => banana [2] => carrot) Array ([0] => apple [1] => banana [2] => carrot) Array ([0] => apple [1] => banana [2] => banana) Two bananas in the last set?! Not what I expected.