Anche secondo me il problema è nell'incremento di $i.

Spostalo subito dopo la chiusura della if dentro il ciclo while e vedi se rispecchia il funzionamento che ti interessa.