foreachで無限ループする方法

なんかforeachなら絶対に無限ループなんかないと僕は思っていたわkです。
forじゃないんだから、無限ループになるわけなんかないでしょ。
って思っていた自分は死ねばいいと思います。マジで。
まあ無限ループというかメモリオーバーで落ちるだけなんですが、うっかり「memroy_limit = 12288M」とかしちゃうと、なかなかメモリーオーバーにならないのです(´・ω・`)
ということで、foreachで無限ループさせてしまいました。
眠いときのコーディングは本当に気をつけた方がいいと思います。
<?php
echo "start\n";
$data = array('polidog','polidog2','polidog3');
foreach($data as &$value ) {
$data[] = $value;
}
んで、こんな感じでPHP落ちます
Fatal error: Allowed memory size of 134217728 bytes exhausted...
てか、なんで参照渡しにすると無限に配列が増えてしまうのか若干理解できてないです…。
誰か教えてください。
追記
てかこうすれば永久的にループし続けるし、メモリーオーバーにもならない方法見つけました。
<?php
$data = array('polidog','polidog2','polidog3');
foreach($data as $key => &$value ) {
$data[] = $value;
unset($data[$key]);
}