классическое поведение при спорадическом использовании ссылок
т.к. всего кода не видно, то должно помочь
unset($v)
где-нибудь перед циклом foreach
а лучше это выражение использовать после предыдущего использования ссылок для всех ненужных ссылок
причина банальна:
$a = 1;
$v = &$a;
foreach ([ 0, 1, 2, ] as $v);
echo $a;
выведет 2, а присвоение в 3-й строке может быть каким угодно
поэтому желательно всегда делать unset ссылкам после их использования, чтобы не получить такое поведение