从PHP中的某些扩展名过滤的dir文件的最佳方法

Cod*_*ack 30 php filesystems

可能重复:
目录中特定文件的PHP列表
使用php scandir($ dir)并只获取图像!

所以现在我有一个目录,我得到一个文件列表

$dir_f = "whatever/random/";
$files = scandir($dir_f);
Run Code Online (Sandbox Code Playgroud)

但是,它会检索目录中的每个文件.如何以最有效的方式仅检索具有特定扩展名的文件,例如.ini.

Lix*_*Lix 70

PHP具有很好的功能,可以帮助您只捕获所需的文件.它叫glob()

glob - 查找与模式匹配的路径名

这是一个示例用法 -

$files = array();
foreach (glob("/path/to/folder/*.txt") as $file) {
  $files[] = $file;
}
Run Code Online (Sandbox Code Playgroud)

参考 -

  • @gor - 需要的不仅仅是我的投票结束[dupe](http://stackoverflow.com/questions/1646099/scan-current-folder-using-php)... (5认同)
  • 请不要回答明显的重复,但请关闭它们.谢谢. (4认同)
  • @Lix - 是的,这是非常旧的代码,但这些可以帮助我解决现在的问题。不客气,兄弟。 (2认同)

mar*_*rio 14

如果您想要搜索多个扩展名,则preg_grep()可以选择进行过滤:

 $files = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
Run Code Online (Sandbox Code Playgroud)

虽然glob有类似的额外语法.如果您有其他条件,添加~i不区分大小写的标志,或者可以过滤组合列表,这通常是有意义的.

  • `glob("{$ dir}*.{jpg,jpeg,gif,ico,png}","GLOB_BRACE"`.这对多个扩展也有效. (3认同)

Lin*_*een 9

PHP的glob()功能让您指定要搜索的模式.


Bab*_*aba 6

你可以尝试使用 GlobIterator

$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME);
$array = iterator_to_array($iterator);
var_dump($array)
Run Code Online (Sandbox Code Playgroud)