Массив передается в foreach
как копия - , если вы не передадите его в качестве ссылки (укажите, что, добавив &
к $value
) , он не будетотражают обновления значения, которое вы делаете в первой итерации.
Учтите это:
foreach ($A as $j => &$line)
{
echo "j = $j line = $line\n";
echo "element $j is {$A[$j]}\n\n";
if ($j == 0)
$A[1] = "***" . $A[1];
}
/* Will output:
* j = 0 line = aa
* element 0 is aa
*
* j = 1 line = ***bb
* element 1 is ***bb
*/
Вы видите &line
, что означает, что мыпередают в блок ссылку, и теперь любое изменение отражается в массиве, а не в $line
копии исходного массива, который вы передали в блок цикла.
Надеюсь, что все ясно ...
Я заметил, что в документах написано, что именно:
В документации точно сказано:)
Для того, чтобы иметь возможность напрямую изменять массивэлементы в цикле предшествуют $ value с &.В этом случае значение будет присвоено по ссылке.