Буферизация - это лучшее решение в большинстве задач подобного рода. См. ответ от Антон Шаманов .
Но вот как-то у меня был случай, что массив было намного удобнее собирать именно литерально - в строку. Это было и удобнее, и понятнее в том случае. А вот, чтобы его потом вытащить из строки, я использовал eval.
Да, можно было подтянуть синтаксис, и юзать json_decode, но тут важно понимать, что разницы особой нет.
Если через eval пропускается внутренняя строка, без всяких входящих данных - он ничем не опасен. Во всех остальных случаях - лучше его не использовать.