Hi Jill,

<?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.

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.)

print_r($items);
?>

// Output:
Array
(
    [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.
You can fix your bug by using 'unset($item);' after the second foreach-loop.




--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to