Не копировать на чужой ответ, но preinheimer верен.
На первой итерации цикла вы устанавливаете для ряда значений значение false (строка «0» является ложной в PHP).).Затем выполняется обнаружение их в последующих вызовах, а затем преждевременное завершение (поскольку current в данном случае возвращает false).Ваши два варианта используют каждый (как предложено preinheimer) или foreach вместо while (как предложено Khez).
Лично, (как я уже говорил в комментариях выше), я рассматриваю foreach как far более интуитивно понятный и, следовательно, лучше практиковать, но ни один из них не является функционально неправильным.