我发现此代码遍历文件夹中的文件:
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 :(得分:1)
glob
非常符合您的要求。但是,由于您似乎正在使用Laravel(由于标记),您应该查看Laravel的FileSystem
类(可使用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
}
}
但是如果你想要一个更强大的文件查找系统,你可以使用Symfony的Finder
组件(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
在它上面。)