[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: инициализация массива
stasuss
Всем привет.

Всю голову сломал, но понять не могу.

встретил вопрос "что выведет данный код и почему?":

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$item) {
echo $item;
}

foreach ($arr as $item) {
echo $item;
}


вывело естессно 1234 1233

начал думать.. не понял. сделал var_dump - последний элемент ссылка на предпоследний. добавил в инициализацию строковый элемент - все равно ссылка на число, добавил еще один строковый - ссылка на предыдущую строку...

$arr=array(1,2,3,4,'5');


var_dump дает

array(5) {
[0]=>
int(1)
[
1]=>
int(2)
[
2]=>
int(3)
[
3]=>
int(4)
[
4]=>
&
int(4)
}


всегда юзал массивы и не задумывался над этим ньюансом, сейчас страшно стало.. почему такая ерунда происходит??? что бы получить точное содержимое при переборе, надо брать элементы по ссылке?? :blink:
vital
Цитата
надо брать элементы по ссылке??

что бы получить точное содержимое при переборе надо ДО этого не брать элементы по ссылке.
..Или сделать сначала unset($item);
В доке по циклу foreach этот нюанс описан. Читайте ман, полезно wink.gif

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Oyeme

$arr = array(1, 2, 3, 4);
foreach ($arr as &$item) {
echo $item;
}

unset($item); // break the reference with the last element

foreach ($arr as $item) {
echo $item;
}



As foreach relies on the internal array pointer changing it within the loop may lead to unexpected behavior.

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

http://php.net/manual/en/control-structures.foreach.php
stasuss
вот блин заковыристый какой код попалсо... читал что ссылка после foreach остается активна, но не подумал что тут такие чудеса из за этого)))
Быстрый ответ:

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