Intereting Posts
удаление объектов в каскаде, не работающих в отношениях ManyToMany простой html dom: как получить тег без определенного атрибута Использование mysql COUNT для подсчета нескольких столбцов MySQL добавляет поля в Enum Показывать видеоролики YouTube только для пользователей сайта LAST_INSERT_ID (), как он работает в среде с несколькими пользователями htaccess скрыть каталог со всех URL-адресов на веб-сайте Простая структура сайта RewriteRule для параметров PHP GET скрипт работает нормально, когда запускается из командной строки, но не через cron Как вы исправляете Nginx автоматически 301 перенаправление на тот же URL с завершающим косой чертой? Добавить 1 в поле CodeIgniter не работает с многоуровневыми подпапками для обоих контроллеров и представлений WooCommerce отправляет клиенту новый заказ Как изменить атрибут Cross Origin с использованием loadFromJSON? Как загрузить файл на сервер PHP?

php – glob для поиска каталогов и .jpg только

Что делать, если я хочу искать только подкаталоги и некоторые типы файлов. Ex. У меня есть папка с именем «stuff», где загружаются случайные вещи. И скажу, что я хочу искать только вложенные папки AND .jpg файлов в «stuff» и не более того. Я знаю, чтобы искать только .jpg is …

$array = glob('stuff/{*.jpg}', GLOB_BRACE);

и поиск только подкаталогов – это …

$array = glob('stuff/*', GLOB_ONLYDIR);

… но как я могу объединить эти два без каких-либо других нежелательных файлов? Есть ли шаблон для подкаталогов для GLOB_BRACE?

Эта рекурсивная функция должна делать трюк:

 function recursiveGlob($dir, $ext) { $globFiles = glob("$dir/*.$ext"); $globDirs = glob("$dir/*", GLOB_ONLYDIR); foreach ($globDirs as $dir) { recursiveGlob($dir, $ext); } foreach ($globFiles as $file) { print "$file\n"; // Replace '\n' with '<br />' if outputting to browser } } 

Использование: recursiveGlob('C:\Some\Dir', 'jpg');

Если вы хотите, чтобы он делал другие вещи для отдельного файла, просто замените часть print "$file\n" на print "$file\n" .

Функция может быть более конкретной в своих поисках glob и сопоставлять только каталоги, а также файлы с указанным расширением, но я сделал это таким образом для простоты и прозрачности.

Я не уверен, что я следую именно потому, что с вами вы ищете определенный тип файла, а с другим вы ищете подкаталоги. Это совершенно разные шаблоны!

Говоря это, способ иметь массив, содержащий все * .jpg файлы в файлах stuff/ а также подкаталоги в stuff/ должен был бы сделать ваш код еще одним шагом:

 $jpg_array = glob('stuff/{*.jpg}', GLOB_BRACE); $subdir_array = glob('stuff/*', GLOB_ONLYDIR); // Combine arrays $items = array_merge($jpg_array,$subdir_array); // Do something with values foreach($items as $item) { echo($item . "<br>"); }