четверг, 12 декабря 2019 г.

Or-pattern в glob

Короткий пост о том, как в аргументе функции glob использовать шаблон или.

Предположим, каталог содержит следующие файлы:

- file.txt
- picture
- picture.gif
- picture.jpg
- picture.png
- picture1.jpg


И требуется получить файлы имеющие в названии только "picture" ("picture1" не подходит) и с расширениями jpg, png или вообще без расширения.

Естественно, простейшим решением можно считать объединение результатов трех вызовов glob:

print_r(array_merge(
    glob('./picture\.jpg'),
    glob('./picture\.png'),
    glob('./picture')
));


Но давайте попробуем ограничиться одним вызовом. В этом нам поможет изучение странички мануала функции glob, а точнее - списка параметров. В нем нас интересует второй аргумент flags и его значение GLOB_BRACE:

print_r(
    glob('./picture{,\.jpg,\.png}', GLOB_BRACE)
);


Получаем тот же самый набор файлов, что и в первом примере (сортировка не в счет). На этом всё, читайте почаще мануалы и находите решения попроще. Кстати, в комментах можете поделиться еще более хитрыми шаблонами для glob, если у вас таковые есть.

Комментариев нет:

Отправка комментария