6

SPLを使用して、場合によってはRecursiveDirectoryIteratorおよびを使用して、完全なディレクトリ ツリーを取得するにはどうすればよいRecursiveIteratorIteratorですか?

4

2 に答える 2

19

デフォルトでは、は の 2 番目の引数としてRecursiveIteratorIteratorを使用します。これは、ファイルのみを返すことを意味します。ファイルディレクトリを含めたい場合 (少なくとも、それは完全なディレクトリ ツリーと見なすものです)、次のようにする必要があります。LEAVES_ONLY__construct

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);

そして、あなたはそれをforeach乗り越えることができます。ディレクトリツリーを出力する代わりに返したい場合は、配列に格納できます。

foreach ($iterator as $fileObject) {
    $files[] = $fileObject;
    // or if you only want the filenames
    $files[] = $fileObject->getPathname();
}

$fileObjects次のようにして、なしでの配列を作成することもできますforeach

$files[] = iterator_to_array($iterator);

ディレクトリのみを返したい場合は、次foreach$iteratorようにします。

foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}
于 2010-04-16T19:28:36.850 に答える
3

あなたはただ、またはあなたが望むすべてをすることができます

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
于 2010-03-17T15:28:48.613 に答える