I got here just by accident and the OP's question got my attention. Unfortunately I do not understand any of the explanations from the top. Seems to me like everybody knows it, gets it, accetps it, just cannot explain.
Luckily, a pure sentence from PHP documentation on foreach makes this completely clear:
Warning: Reference of a $value
and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().