[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Жосткая ссылки foreach
Бобр Добр 2012
С Рождеством!
Можете объяснить почему следующий код так работает.

<?php
$a = array(3, 3, 0, 2, 1);

foreach($a as &$v)//жёсткая ссылка
{
echo $v;//перебрал массив

}
foreach($a as $v)
{
echo $v;//всё норм, только 5 элемент будет 2(равен 4-му)
}
?>




Спустя 18 минут, 50 секунд (7.01.2012 - 15:07) Jack_White написал(а):
При использовании переменной-ссылки в foreach, изменяется содержание, на которое она ссылается.
<?php
$ref = 0;
$row =& $ref;
foreach (array(1, 2, 3) as $row) {
// do something
}
echo $ref; // 3 - последнее значение, используемое в цикле
?>


В мануале

Спустя 30 минут, 15 секунд (7.01.2012 - 15:37) Бобр Добр 2012 написал(а):
стоп! а разве переменная row не локальна для цикла и не удаляется после выполнения цикла?
ну то есть rew и row (их связь) не имеет ни кого отношения к имени переменной в цикле

Спустя 8 минут, 14 секунд (7.01.2012 - 15:46) Jack_White написал(а):
В твоем случае ссылка меняет последнее значение массива на предпоследнее

Спустя 24 минуты, 3 секунды (7.01.2012 - 16:10) Placido написал(а):
Цитата
Внимание

Ссылка $value на последний элемент массива остается даже после того, как оператор foreach завершил работу. Рекомендуется уничтожить ее с помощью функции unset().

Если более подробно, то после того как отработал первый foreach, $v остается ссылкой на последнюю ячейку массива $a ($a[4]). Во втором foreach с каждым циклом значение $a[] поочередно присваивается переменной $v и, соответственно, ячейке $a[4]. И таким образом, на предпоследнем цикле $v и $a[4] принимают значение a[3]. Для того чтобы этого не происходило, после первого foreach следует уничтожить $v с помощью unset().
<?php
$a = array(3, 3, 0, 2, 1);

foreach($a as &$v){
echo $v;
}
unset($v);
foreach($a as $v)
{
echo $v;
}
?>

----
Поправил, не $a[3], а $a[4].

Спустя 22 минуты, 51 секунда (7.01.2012 - 16:33) Бобр Добр 2012 написал(а):
спасибо всем! разобрался
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.