Удалить разом все файлы по вхождению

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), то надо проверить адекватность, с которой вы воспринимаете реальность.

И в этом смысле поиски способа выполнить удаление нескольких файлов "без цикла" заведомо не имеют смысла.

→ Ссылка