ホームページ  >  記事  >  バックエンド開発  >  PHP でツリー構造を走査する場合、RecursiveIteratorIterator と IteratorIterator はどう違うのでしょうか?

PHP でツリー構造を走査する場合、RecursiveIteratorIterator と IteratorIterator はどう違うのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-16 04:25:02942ブラウズ

How does RecursiveIteratorIterator differ from IteratorIterator for traversing tree structures in PHP?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。