Ключевым моментом является то, что в PHP нет указателей.Он имеет ссылки , что аналогично, но отличается концепцией, и есть некоторые тонкие различия.
Если вы используете var_dump () вместо print_r (), этолегче определить:
$collection = array(
'First',
'Second',
'Third',
);
foreach($collection as &$item){
echo $item . PHP_EOL;
}
var_dump($collection);
foreach($collection as $item){
var_dump($collection);
echo $item . PHP_EOL;
}
... печатает:
First
Second
Third
array(3) {
[0]=>
string(5) "First"
[1]=>
string(6) "Second"
[2]=>
&string(5) "Third"
}
array(3) {
[0]=>
string(5) "First"
[1]=>
string(6) "Second"
[2]=>
&string(5) "First"
}
First
array(3) {
[0]=>
string(5) "First"
[1]=>
string(6) "Second"
[2]=>
&string(6) "Second"
}
Second
array(3) {
[0]=>
string(5) "First"
[1]=>
string(6) "Second"
[2]=>
&string(6) "Second"
}
Second
Обратите внимание на символ &
, оставленный в последнем элементе массива.
Для суммированиявверх, всякий раз, когда вы используете ссылки в цикле, рекомендуется удалить их в конце:
<?php
$collection = array(
'First',
'Second',
'Third',
);
foreach($collection as &$item){
echo $item . PHP_EOL;
}
unset($item);
var_dump($collection);
foreach($collection as $item){
var_dump($collection);
echo $item . PHP_EOL;
}
unset($item);
... печатает ожидаемый результат каждый раз.