有没有办法 glob() only files?

2022-08-30 11:43:34

我知道glob可以查找文件夹中的所有文件或仅查找所有目录:

echo "All files:\n";
$all = glob("/*");
var_dump($all);

echo "Only directories\n";
$dirs = glob("/*", GLOB_ONLYDIR);
var_dump($dirs);

但是我没有找到一些东西来有效地在一行中仅查找文件。

$files = array_diff(glob("/*"), glob("/*", GLOB_ONLYDIR));

工作良好,但读取目录两次(即使有一些优化使第二次浏览更快)。


答案 1

我终于找到了一个解决方案:

echo "Only files\n";
$files = array_filter(glob("/*"), 'is_file');
var_dump($files);

但要小心,array_filter将保留数字键 :如果您需要对数组重新编制索引,请使用array_values


答案 2

您可以使用 将文档与已知文件扩展名的列表进行匹配:GLOB_BRACE

$files = glob("/path/to/directory/*.{jpg,gif,png,html,htm,php,ini}", GLOB_BRACE);

请参见: http://www.electrictoolbox.com/php-glob-find-files/


推荐