Не могу понять

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Не могу понять

Сообщение leshov »

Есть такой код на php

Код: Выделить всё

<?php

$result = array(
    array('id'=>1),
    array('id'=>2),
    array('id'=>3),
    array('id'=>4),
);

foreach($result as &$item){
    print_r($item);
}


foreach($result as $item){
    print_r($item);
}

?>
Я полагал, что вывод должен быть одинаковый, но у меня он разный:
Array
(
[id] => 1
)
Array
(
[id] => 2
)
Array
(
[id] => 3
)
Array
(
[id] => 4
)
Array
(
[id] => 1
)
Array
(
[id] => 2
)
Array
(
[id] => 3
)
Array
(
[id] => 3
)

Вывод последнего элемента в массиве в первом цикле отличается от вывода последнего элемента во втором цикле.
Подскажите, пожалуйста, в чем ошибка?
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Не могу понять

Сообщение Антон Смирнов »

После первого цикла нужно unset($item); т.к. ссылка.
Аватара пользователя
solo
Сообщения: 320
Зарегистрирован: 2013.03.08, 19:59
Откуда: Ukraine, VINNITSA

Re: Не могу понять

Сообщение solo »

Смысла в этом коде нет, так как нет присваивания.
foreach($result as &$item){
print_r($item);
}

Нуно читать http://ru.php.net/manual/ru/control-str ... oreach.php
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Не могу понять

Сообщение leshov »

Антон Смирнов писал(а):После первого цикла нужно unset($item); т.к. ссылка.
Спасибо за подсказку. Так, действительно, работает.
Правда, это удивительно. Второй цикл должен, по идее, инициализировать переменную $item новым значением.
leshov
Сообщения: 16
Зарегистрирован: 2010.08.16, 21:27

Re: Не могу понять

Сообщение leshov »

solo писал(а):Смысла в этом коде нет, так как нет присваивания.
foreach($result as &$item){
print_r($item);
}

Нуно читать http://ru.php.net/manual/ru/control-str ... oreach.php
Это упрощенный код для обсуждения особенностей языка. Никакой пользы, в нем, естественно, нет.
Аватара пользователя
Антон Смирнов
Сообщения: 284
Зарегистрирован: 2011.07.08, 10:37
Контактная информация:

Re: Не могу понять

Сообщение Антон Смирнов »

leshov писал(а):
Антон Смирнов писал(а):После первого цикла нужно unset($item); т.к. ссылка.
Спасибо за подсказку. Так, действительно, работает.
Правда, это удивительно. Второй цикл должен, по идее, инициализировать переменную $item новым значением.
Посмотрите по этой же ссылке, там есть пример с комментариями: http://ru.php.net/manual/ru/control-str ... oreach.php

На хабре также была статья, тогда это назвали "подводным камнем".
Ответить