如何使用Symfony Finder排除缺少指定文件的目录?
过滤包含指定全部文件的目录
没问题!要实现这个需求很简单,咱们只需要在现有代码的基础上,给每个目录加个「校验关卡」——检查它是否包含所有你需要的文件(也就是aaa.php、bbb.php、ccc.php),只有全部文件都存在的目录才保留下来。
直接给你修改后的代码,每一步都加了注释:
$dirs = []; // 先定义好必须存在的文件列表,后续要修改需求直接改这个数组就行 $requiredFiles = ['aaa.php', 'bbb.php', 'ccc.php']; $finder = new Finder(); $finder->directories()->in(__DIR__)->depth('== 0'); foreach ($finder as $directory) { $dirFullPath = $directory->getPathname(); $hasAllRequiredFiles = true; // 逐个检查必需文件是否存在于当前目录 foreach ($requiredFiles as $fileName) { $fileFullPath = $dirFullPath . DIRECTORY_SEPARATOR . $fileName; if (!file_exists($fileFullPath)) { $hasAllRequiredFiles = false; break; // 只要有一个文件不存在,直接终止检查,节省性能 } } // 只有所有必需文件都存在,才把这个目录加入结果数组 if ($hasAllRequiredFiles) { $dirs[] = $directory->getRelativePathname(); } } print_r($dirs);
运行这段代码后,输出就会变成你想要的样子:
array( [0] => FolderA [1] => FolderB [2] => FolderD )
这个方案逻辑清晰,扩展性也很强——如果以后需要调整必需的文件,只需要修改$requiredFiles数组里的内容就行,不用动核心逻辑。
内容的提问来源于stack exchange,提问作者Dwza
相关产品推荐
相关产品推荐

