PHP の RecursiveIteratorIterator は、ツリー トラバーサルをサポートするイテレータの実装です。これにより、Wikipedia の Iterator 記事で定義されているイテレータの一般原則とパターンと同様に、RecursiveIterator インターフェイスを実装するコンテナ オブジェクトのトラバースが可能になります。
線形オブジェクトのトラバースを容易にする IteratorIterator とは異なり、RecursiveIteratorIterator はツリー構造のトラバースに重点を置いています。オブジェクトの。 IteratorIterator は任意の Traversable を処理できますが、RecursiveIteratorIterator は特に RecursiveIterators をターゲットにし、ツリー状のデータ構造の包括的な走査を可能にします。
次の構造を持つディレクトリ リストを考えてみましょう:
[tree] ├ dirA └ fileA
IteratorIterator を使用する、ディレクトリの直接の内容を走査できます:
$dir = new DirectoryIterator($path); foreach ($dir as $file) { echo " ├ $file\n"; }
出力:
├ . ├ .. ├ dirA ├ fileA
ネストされたディレクトリを含むツリー全体を走査するには、RecursiveIteratorIterator:
が必要です。$dir = new RecursiveDirectoryIterator($path); $files = new RecursiveIteratorIterator($dir); foreach ($files as $file) { echo " ├ $file\n"; }
出力:
├ tree\. ├ tree\.. ├ tree\dirA ├ tree\dirA\. ├ tree\dirA\.. ├ tree\dirA\fileB ├ tree\dirA\fileC ├ tree\fileA
RecursiveTreeIterator の出力を拡張するには、ベース名の抽出を処理するデコレーター クラスを作成できます。このデコレータは RecursiveDirectoryIterator の代わりに使用でき、目的の出力を提供します。
$lines = new RecursiveTreeIterator( new DiyRecursiveDecorator($dir) ); $unicodeTreePrefix($lines); echo "[$path]\n", implode("\n", iterator_to_array($lines));
出力:
[tree] ├ dirA │ ├ dirB │ │ └ fileD │ ├ fileB │ └ fileC └ fileA
RecursiveIteratorIterator のニュアンスと IteratorIterator との違いを理解することで、次のことが可能になります。階層ディレクトリやオブジェクト グラフなどの複雑なデータ構造を効果的に横断します。
以上がPHP の IteratorIterator と RecursiveIteratorIterator の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。