PHP - 按模式获取dir中的所有文件名

时间:2014-12-03 08:12:44

标签: php file laravel directory filenames

我发现此代码遍历文件夹中的文件:

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所以也许它有一个功能,但我找不到有用的东西

1 个答案:

答案 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在它上面。)