Выбор ответа Middle Массивы изнутри спрашивают часто обновлено

Ловушка foreach по ссылке

Вопрос

Что выведет код?

$arr = [1, 2, 3];
foreach ($arr as &$v) {}
foreach ($arr as $v) {}
echo implode(', ', $arr);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 1, 2, 2. После первого цикла $v осталась ссылкой на последний элемент массива.

Варианты ответа

  1. 1, 2, 3
  2. 1, 2, 2правильный ответ
  3. 3, 3, 3
  4. 1, 1, 1

Разбор

После первого цикла $v осталась ссылкой на последний элемент массива. Второй цикл присваивает $v (то есть последнему элементу) по очереди 1, 2, а на третьем шаге сам последний элемент, который уже равен 2. Итог [1, 2, 2]. Лечится unset($v) сразу после цикла по ссылке.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.