You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:54:24