sexyboy
Постоялец
- Регистрация
- 9 Июн 2008
- Сообщения
- 90
- Реакции
- 58
- Автор темы
- #1
Помогите пожалуйста разобратся с этим листингом, вроде все понятно(в 1 цикле есть жесткая ссылка &$v которая сохраняет последние значения на последней итерации, потом идет второй цикл и тут я не могу понять почему значения которое принимает $v(на первой итерации) не заменяет последние значение &$v с первого цикла, а заменяет на то значение что стоит перед переменной, т.е. я немогу понять почему результат именно такой Array ( [0] => 101 [1] => 314 [2] => 314) а не такой Array ( [0] => 101 [1] => 314 [2] => 101)- те первое значения массива 2-го цикла заменило то последнее значения 1-го цикла). Объясните пожалуйста как работает второй цикл(почему он заменяет именно так?).Вы можете теперь убедиться, что новая версия программы действительно изменяетPHP:<?php $numbers = array(100, 313, 605); foreach ($numbers as &$v) $v++; print_r($numbers); foreach ($numbers as $v); echo "<br>"; print_r($numbers); ?>
массив $numbers, а не работает с его копией.
Внимание!
Ссылочная переменная $v— это полноценная жесткая ссылка, которая не
уничтожается после завершения работы цикла foreach! Таким образом, если вы попытаетесь что-то
присвоить переменной $v в конце программы, изменения затронут последний элемент
массива $numbers — ведь именно он соответствовал $v на последней итерации цикла!
В последнем цикле вывода листинга: последний элемент массива $numbers, которому соответствует жесткая ссылка $v, "затирается" при последующей итерации по массиву.
Заранее спасибо.
з.ы. запостил здесь так как листинг очень простой и не стоит PHP раздела-) и дабы не подумали что я набиваю посты, уже 3-ий час думаю и немогу понять