I have this code:
$a = array ('zero','one','two', 'three');
foreach ($a as &$v) {
}
foreach ($a as $v) {
echo $v.PHP_EOL;
}
Can somebody explain why the output is: zero one two two .
From zend certification study guide.
I have this code:
$a = array ('zero','one','two', 'three');
foreach ($a as &$v) {
}
foreach ($a as $v) {
echo $v.PHP_EOL;
}
Can somebody explain why the output is: zero one two two .
From zend certification study guide.
Because on the second loop, v is still a reference to the last array item, so it's overwritten each time.
You can see it like that:
$a = array ('zero','one','two', 'three');
foreach ($a as &$v) {
}
foreach ($a as $v) {
echo $v.'-'.$a[3].PHP_EOL;
}
As you can see, the last array item takes the current loop value: 'zero', 'one', 'two', and then it's just 'two'... : )
I'm not sure I can explain why but this is documented in the manual.
The comment also provides some solutions if that is what you are looking for.