file — получить все имена файлов в каталоге по шаблону

Я нашел этот код для перебора файлов в папке:

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 ...
Теперь мне нужно отфильтровать все файлы и получить только те, которые начинаются с «project-1- ??» Как я мог это сделать, я должен использовать blob() функционировать? Есть ли простой пример? Я использую Laravel, так что, возможно, есть функция для этого, но я не мог найти что-то полезное

0

Решение

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

Вы можете сделать что-то вроде этого:

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

Но если вам нужна более мощная система поиска файлов, вы можете использовать Symfony’s Finder составная часть (документы), который уже включен в ваш проект, если вы используете 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над этим).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]