Ответ пишу с планшета, не очень удобно, поэтому код не приведу, а расскажу только последнее применение, недельной давности. Как известно, md5(microtime()) не гарантирует уникальности, возможны коллизии. Так вот пример, файловый менеджер на php, во время загрузки файла на сервер генерируется имя по принципу md5(microtime()) . $extension, далее проверяется нет ли такого имени файла в БД. Т.е. в этом случае минимум один раз выполнится необходимая операция. Ээх, приведу и пример кода:
...
do {
$filename = md5(microtime()) . $extension;
$file = File::find()->where(["filename"=>$filename])->one(); // yii2 синтаксис
if ($file === null) break;
} while (true);
...
Есть хороший пример использования do while при работе с пространственными данными, при поиске альтернативного пути (есть карта сети провайдера, в случае аварии ищет свободные волокна на других магистралях), правда сейчас я в отпуске и не могу показать пример кода - его просто нет под рукой, хотя возможно такой пример будт сложным для студентов. А пример выше достаточно прост для понимания и абсолютно точно показывает необходимость в таком цикле.