Какую маску применить в функции glob()?

Есть такое выражение:

$dir2="/home/user/www/somesite.com/photos/".$folder_name."/";}
$massiv2 = glob($dir2."*");


Сейчас glob "собирает" все файлы.
Что требуется: чтобы файлы, в которых есть буквы (латинские) 'a', 'b', 'c' и 'd', не попадали в массив $massiv2. Интересует маска, которую можно применить в данной ситуации.
  • Вопрос задан
  • 2768 просмотров
Решения вопроса 1
conf
@conf
Ruby developer
Я бы не парился с итераторами, а отфильтровал бы уже полученный массив путей файлов из glob (если их у вас конечно не десятки тысяч), как-то так:
php > var_dump(glob('*'));
array(5) {
  [0] =>
  string(1) "a"
  [1] =>
  string(1) "b"
  [2] =>
  string(1) "c"
  [3] =>
  string(5) "hello"
  [4] =>
  string(4) "test"
}
php > var_dump(preg_grep('/[abcd]/', glob('*'), PREG_GREP_INVERT));
array(2) {
  [3] =>
  string(5) "hello"
  [4] =>
  string(4) "test"
}
php >
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
egor_nullptr
@egor_nullptr
Используйте итераторы:
$iterator = new RegexIterator(
    new DirectoryIterator(
        $dir2,
        FilesystemIterator::KEY_AS_PATHNAME
        | FilesystemIterator::CURRENT_AS_FILEINFO
        | FilesystemIterator::SKIP_DOTS
    ),
   '~[^a-d]~'
);

foreach ($iterator as $file_info) {
    $filename = $file_info->getBasename();
};
Ответ написан
Комментировать
CrazySquirrel
@CrazySquirrel
Сори, не дочитал
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Альтернативные реализации принимаете?
https://github.com/nazar-pc/Useful-PHP-Functions/blob/master/upf.php#L102
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы