Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有RecursiveCallbackFilterIterator的RecursiveDirectoryIterator isn';正确过滤文件名_Php - Fatal编程技术网

Php 带有RecursiveCallbackFilterIterator的RecursiveDirectoryIterator isn';正确过滤文件名

Php 带有RecursiveCallbackFilterIterator的RecursiveDirectoryIterator isn';正确过滤文件名,php,Php,我试图递归地搜索具有给定名称的所有文件,同时忽略某些子目录。我不明白为什么会产生一个空数组 <?php $filename = 'phpunit.xml'; $ignoredDirs = ['/vagrant_web/vendor', '/vagrant_web/public']; $directories = new \RecursiveDirectoryIterator('/vagrant_web', \RecursiveDirectoryIterator::SKIP_DOT

我试图递归地搜索具有给定名称的所有文件,同时忽略某些子目录。我不明白为什么会产生一个空数组

<?php

$filename    = 'phpunit.xml';
$ignoredDirs = ['/vagrant_web/vendor', '/vagrant_web/public'];

$directories = new \RecursiveDirectoryIterator('/vagrant_web', \RecursiveDirectoryIterator::SKIP_DOTS);
$filter      = new \RecursiveCallbackFilterIterator(
    $directories,
    function ($current, $key, $iterator) use ($filename, $ignoredDirs) {
        $path = $current->getPathName();

        foreach ($ignoredDirs as $ignore) {
            if (strpos($path, $ignore) !== false) {
                return false;
            }
        }

        if ($current->getFileName() != $filename) {
            return false;
        }

        return true;
    }
);

$files = [];
foreach (new \RecursiveIteratorIterator($filter) as $file) {
    $files[] = $file;
}

print_r($files);

这是怎么回事?如何在忽略某些目录的情况下搜索特定的文件名?

在回调函数的顶部包含以下内容:

if($iterator->hasChildren()) {
  return true;
}
if($iterator->hasChildren()) {
  return true;
}