Проблема с foreach($arr as &$val){...}

Drkwv

Новичок
Проблема с foreach($arr as &$val){...}

PHP:
  $ARGS=array(1,2,3);
  echo('<pre>');
  print_r($ARGS);
  foreach($ARGS as &$val)$val=$val;
  print_r($ARGS);
  foreach($ARGS as $val)echo($val);
  echo('</pre>');
печатает мне в ответ
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)
122
Почему 122? Я не понимаю. Должно быть 123 и в print_r почему-то все правильно: 123. Выражение $val=$val можно заменить на любое другое $val=... и последний элемент все равно окажется неправильным. В чем причина?
 

phprus

Moderator
Команда форума
Drkwv
foreach($ARGS as &$val)$val=$val;
После выполнения этого цикла переменная $val становится ссылкой на последний элемент массива $ARGS. Когда выполняется второй цикл:
foreach($ARGS as $val)echo($val);
то значение присваивается $val, но так как это ссылка то значение присваивается последнему элементу массива $ARGS. Именно по этому в нем будет значение предпоследнего элемента в тот момент, когда foreach дойдет до него.
 
Сверху