Creo que el for te hace todo el recorrido del bucle en cada ciclo del otro bucle, el while.
Yo probaría a declarar $i fuera de bucle, y una vez dentro hacer la condición if:
Código:
if ($i < (count($a)) {condiciones;}
Al final del bucle, antes de cerrarlo:
Algo así te funcionará. Prueba y me comentas.