При каждой итерации PHP может выделять новый блок памяти и копировать всю строку + новую часть. Это приводит к квадратичной сложности O(n^2) по памяти и времени.
На практике PHP оптимизирует случай, когда у строки refcount=1 (единственная ссылка) - тогда память расширяется через realloc без копирования. Но если строка имеет другие ссылки, произойдет полное копирование.
Для большого количества итераций (1000+) implode() с массивом или sprintf() предпочтительнее.