Я нашел этот код для перебора файлов в папке:
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, так что, возможно, есть функция для этого, но я не мог найти что-то полезное
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
над этим).
Других решений пока нет …