2014-01-02 1 views
1

Вместо перечисления всех файлов и каталоговPHP: Использование glob() для отображения * .txt и каталогов?

foreach(glob("/*") as $file) { 
    ... 
} 

Есть ли способ для фильтрации * .txt файлов и каталогов? Потому что в этом примере

foreach(glob("/*.txt") as $file) { 
    ... 
} 

Будет получать только файлы * .txt, но не каталоги. Но для того, чтобы перечислять только каталоги, это будет работать:

foreach(glob("/*", GLOB_ONLYDIR) as $file) { 
    ... 
} 

но не будут содержать * .txt файлы. Я стараюсь избегать использования preg_match() или аналогичных операций после чтения каталога, потому что он будет тратить ресурсы сервера, если есть около 5000 ненужных файлов (файлы изображений с * .jpg, * .png).

спасибо.

+2

Почему бы не вызвать 'glob()' дважды и объединить результирующие массивы перед разбором? – Crontab

+0

Да, это может быть вариант. Но интересно, возможно ли это за один раз. Благодаря! – user702300

+0

@ user702300 Как бы вы сделали разницу между файлом с именем 'foo' и каталогом с именем' foo'. Я думаю, вам нужно использовать две функции: одну для получения всех каталогов, а другую - для получения определенных файлов. – HamZa

ответ

1

попытался также GLOB_BRACE, но он не работал, поэтому пришлось использовать следующий код:

$aDir1 = glob('/*.txt'); // current directory 
$aDir2 = glob('/*/*.txt'); // subdirectory, one level below 

$aDir = asort(array_merge($aDir1, $aDir2)); 

Спасибо.

Смежные вопросы