【PHP8.x】getSubIteratorメソッドの使い方

getSubIteratorメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

『getSubIteratorメソッドは、RecursiveIteratorIteratorが現在処理している階層にある、子要素の集合を扱うための内部イテレータを取得するメソッドです。RecursiveIteratorIteratorは、多次元配列やディレクトリ構造といった階層を持つデータを先頭から順番に処理するために使われます。その処理の途中で、現在の要素がさらに子要素を持つ場合、このメソッドはその子要素の集まりを処理するためのイテレータオブジェクトを返します。例えば、ディレクトリ構造を処理している際に現在の要素がディレクトリであれば、そのディレクトリ内のファイルやサブディレクトリを扱うためのイテレータが取得できます。現在の要素が子を持たない場合、つまりファイルなどの末端要素である場合にはnullを返します。オプションの引数で階層レベルを指定すれば、特定の深さの内部イテレータを取得することも可能です。これにより、特定の階層の要素に対してのみ並べ替えなどの特別な処理を適用する際に役立ちます。

構文(syntax)

1<?php
2
3$data = [
4    'item1',
5    'item2',
6    [
7        'sub-item1',
8        'sub-item2',
9    ],
10    'item3'
11];
12
13$arrayIterator = new RecursiveArrayIterator($data);
14$iterator = new RecursiveIteratorIterator($arrayIterator, RecursiveIteratorIterator::SELF_FIRST);
15
16foreach ($iterator as $key => $value) {
17    if ($iterator->hasChildren()) {
18        // 現在の要素が子を持つ場合、その子要素のイテレータ(RecursiveArrayIterator)を取得する
19        $subIterator = $iterator->getSubIterator();
20        printf("Found a sub-iterator of type: %s\n", get_class($subIterator));
21    }
22}

引数(parameters)

?int $level = null

  • ?int $level = null: 現在のイテレータのレベルを指定する整数。null または指定しない場合は、現在のレベルが使用されます。

戻り値(return)

?RecursiveIterator

現在のイテレーターのレベルに対応する RecursiveIterator を返します。もし、現在のイテレーターが終端に達している場合は null を返します。