RecursiveIteratorIterator について
RecursiveIteratorIterator は、RecursiveIterator インターフェイスを実装するコンテナ オブジェクトのトラバーサルを可能にする、PHP の特殊なイテレータです。これにより、順序付けされたツリー構造内のすべてのノードをループすることができます。
IteratorIterator との違い
具体的な Iterator である IteratorIterator は、オブジェクトの線形トラバースをサポートします。対照的に、RecursiveIteratorIterator には RecursiveIterator が必要であり、ツリー上のループを許可します。
ツリー構造のトラバース
RecursiveIteratorIterator は、ノードのすべての子ノード (存在する場合) を再帰的に探索します。スタックを使用して、トラバーサルの各レベルの現在のサブ反復子を追跡します。これにより、深さに関係なく、ツリー内のすべてのノードにアクセスできます。
メタ情報とモード
IteratorIterator とは異なり、RecursiveIteratorIterator はイテレータのメタ情報へのアクセスを提供します。これには、インデントやその他の目的に使用できる現在のノードの深さが含まれます。さらに、ファイルよりディレクトリを優先する SELF_FIRST や、ファイルのみをリストする LEAVES_ONLY など、さまざまなトラバーサル モードもサポートしています。
例: ディレクトリ リスト
トラバースするにはを使用したディレクトリツリーRecursiveIteratorIterator:
$dir = new RecursiveTreeIterator( new RecursiveDirectoryIterator( $path, RecursiveDirectoryIterator::SKIP_DOTS ), RecursiveIteratorIterator::SELF_FIRST );
これは $path 内のすべてのディレクトリとファイルを反復処理し、ディレクトリが最初にリストされるようにインデントされたリストを表示します。
DIY 演習: RecursiveTreeIterator の強化
以下を提供するデコレータ クラスを作成します。フルパスの代わりにファイルのベース名を指定し、それを RecursiveTreeIterator:
$lines = new RecursiveTreeIterator( new DiyRecursiveDecorator($dir) );
以上がPHP でツリー構造を走査する場合、RecursiveIteratorIterator と IteratorIterator はどう違うのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。