2014-12-03 4 views
0

Я нашел этот код для перебора файлов в папке:PHP - получить все имена файлов в директории по шаблону

if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
    while (($file = readdir($dh)) !== false) { 

      ??????????? 

    } 
    closedir($dh); 
} 

Файлы имеют имена, как: project-1-0, project-1-1, project-5-14, project-6-21 ... Теперь мне нужно фильтровать все файлы и получить только эти, что начинается с "проектом-1?" Как я могу это сделать, следует ли использовать функцию blob()? Есть ли простой пример? Я использую laravel, поэтому, возможно, в нем есть функция, но я не мог найти что-то полезное.

+0

использовать $ файл, чтобы проверить имя для каждого из них? –

+2

'glob()' это способ пойти – Rizier123

+0

Возможный дубликат [Список конкретных файлов PHP в каталоге] (http://stackoverflow.com/questions/3062154/php-list-of-specific-files-in- а-каталог). Но используйте самый проголосовавший ответ. – sectus

ответ

0

glob - это то, что вы хотите здесь. Однако, поскольку вы, кажется, используете Laravel (из-за тега), вы должны посмотреть класс FileSystem Laravel (доступный с использованием фасада File): 4.2 docs. Он предоставляет оболочку для стандартных функций PHP-файлов (хотя на самом деле это не добавляет ничего в микс для ваших целей).

Вы можете делать такие вещи, как это:

if (File::isDirectory($dir)) { 
    foreach (File::glob($dir.'/project-1-*') as $projectDir) { 
     $actualDir = substr($projectDir, strlen($dir) + 1); // trim the base directory 
    } 
} 

Но если вы хотите более мощную систему файлового поиска, вы можете использовать Finder компонент Symfony в (docs), который уже включен в проект, если вы повторное использование Laravel (как некоторые Laravel Filesystem методов используют его), и вы будете в состоянии сделать что-то вроде этого:

$dirs = Finder::create()->in($dir)->depth(0)->directories()->name('project-1-*'); 
// or, if you want to use regex, this should work 
$dirs = Finder::create()->in($dir)->depth(0)->directories()->name('/^project-1-/'); 

Теперь Finder возвращает итератор, так что вы можете используйте функцию PHP iterator_to_array, чтобы превратить ее в массив, если вам нужно использовать ее как массив (при этом итератор лучше, если вам не нужен он как массив, например, foreach).

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