この回答のコードは PHP 5.6.4 で動作させ確認を行っています。
なお、PHP 7 以降については、zval の構造などが変わりますので、一部の特殊な挙動は同様に動作しなくなる可能性があります。(実際に「イテレーション中の内部配列ポインタの変更」などでの一部の挙動が変わっているのを確認しています。)

翻訳版にもこう書かれているというのに。

ループ内で要素数の変更を行うコーディングはしないようにしてるよ。
要素の変更は普通に参照なりkey経由で行うけれど。(array_filter内で変更することとこれとは違うからね)