Удалить разом все файлы по вхождению
foreach (glob(UPLOADS."img-*") as $v)
unlink($v);
В php предусмотрено удаление разом всех файлов по вхождению, без цикла?
Ответы (1 шт):
Если отвечать на вопрос буквально, то ответ простой: нет, встроенной команды для удаления файлов по маске в РНР нет.
Но тут важно понимать причину, по которой этот вопрос задан.
Если это вопрос про оптимизацию размера кода, то он решается созданием пользовательской функции:
function unlink_wildcard($wildcard) {
foreach (glob($wildcard) as $filename) {
unlink($v);
}
}
которую в дальнейшем можно вызвать одной строчкой
unlink_wildcard(UPLOADS."img-*");
Если же это вопрос про оптимизацию скорости выполнения кода, то это важный момент, на котором стоит остановиться подробнее.
Новички очень часто воображают, что если цикл в коде не написан явно, то операция будет выполнена за одно действие и - как следовательно - гораздо быстрее. Но тут надо понимать, что в большинстве случаев это не так.
Например, функция file()
которая читает файл в массив за "одно" действие, внутри себя всё равно содержит цикл, который читает из файла по одной строке. Так что если исходная задача - это замена O(n) на O(1), то надо проверить адекватность, с которой вы воспринимаете реальность.
И в этом смысле поиски способа выполнить удаление нескольких файлов "без цикла" заведомо не имеют смысла.