2

したがって、ディレクトリ全体とサブディレクトリを表示したいと思います。

PHP Docによると、

RecursiveDirectoryIteratorは、ファイルシステムディレクトリを再帰的に反復するためのインターフェイスを提供します

これが私のコードです:

$it = new RecursiveDirectoryIterator("c:\php_win");

foreach ($it as $dir) {
    var_dump($dir->getFilename());
}

上記のコードは1つのレベルのディレクトリのみを示しており、すべてのサブディレクトリは示されていません。

すべてのサブディレクトリを取得するにはRecursiveIteratorIteratorを使用する必要があることはわかっていますが、RecursiveIteratorIteratorイテレータを使用する必要がある理由がわかりません。

ファイルシステムディレクトリを再帰的に反復する」とはどういう意味ですか?IteratorIteratorが必要な理由を説明するWebリンクはありますか?

4

2 に答える 2

2

は、インターフェイスをRecursiveDirectoryIterator実装するクラスです。RecursiveIterator

は、インターフェイスをRecursiveIteratorIterator実装するクラスです。Iterator

トラバーサルを使用foreachすると、オブジェクトが実装されRecursiveIterator、再帰トラバーサル(ツリートラバーサル)が実行されます。ここでPHPでは、巻き戻し、現在のフェッチ、次への進行、有効性のチェックだけでなく子が存在するかどうかのチェック、そして内部での反復も行われます。これらの子供たちも。

RecursiveIteratorIteratorおよびRecursiveDirectoryIterator図

したがって、は、具体的な実装に対してツリートラバーサルを実行しながらRecursiveIteratorItertor、線形順序でオブジェクトトラバーサルを提供します。RecursiveIterator

つまり、これRecursiveDirectoryIteratorは唯一のコンテナです。すぐに反復することができますが(たとえば、foreachを使用して)、その線形順序オブジェクトの反復では、ツリーの走査は行われません。

それがそこにある理由RecursiveIteratorIteratorです、それはそのツリートラバーサルを提供します。

これはまさにあなたのケースです。直接反復RecursiveDirectoryIteratorは線形オブジェクトトラバーサルのみを実行します。インターフェイスRecursiveIteratorIteratorを実装しているオブジェクトでツリートラバーサルを実行する方法を知っているのは知っているだけです。RecursiveIteratorインターフェイス自体を実装するためIterator、ツリートラバーサルに対して線形オブジェクトトラバーサルを実行できます。

RecursiveIteratorIteratorがphpでどのように機能するかについての私の回答も参照してください。これは、可能なツリートラバーサルのさまざまなモードを示すための典型的なディレクトリイテレータをカバーしています。

于 2012-12-22T02:36:19.043 に答える
0

私はRecursiveDirectoryIterator、すべての子を持つディレクトリを読み取り、JSONまたは配列のみを出力できるクラス()の要点になりました。

https://gist.github.com/jonataswalker/3c0c6b26eabb2e36bc90

そして、出力のツリービューア

http://codebeautify.org/jsonviewer/067c13

于 2015-08-07T11:09:36.620 に答える