【PHP8.x】SELF_FIRST定数の使い方

SELF_FIRST定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

SELF_FIRST定数は、再帰的なイテレータを扱うRecursiveIteratorIteratorクラスの動作モードを指定するための定数です。この定数をRecursiveIteratorIteratorのコンストラクタの第二引数に渡すことで、階層構造を持つデータを走査する際の順序を制御できます。SELF_FIRSTモードを指定した場合、イテレータはまず親要素自身を返し、その後にその親要素が持つ子要素を再帰的に処理する順序で動作します。例えば、ファイルシステムのディレクトリ構造を走査する場合、まずディレクトリ自体を処理の対象とし、次にそのディレクトリ内に含まれるファイルやサブディレクトリを処理していきます。この動作は、子要素をすべて処理し終えた後に親要素を処理するCHILD_FIRSTモードとは対照的です。また、末端の要素のみを処理するデフォルトの動作(LEAVES_ONLY)とは異なり、親要素も処理の対象に含めたい場合に利用します。

構文(syntax)

1<?php
2
3$fruits = [
4    'citrus' => ['orange', 'lemon'],
5    'berries' => ['strawberry', 'raspberry'],
6];
7
8$iterator = new RecursiveIteratorIterator(
9    new RecursiveArrayIterator($fruits),
10    RecursiveIteratorIterator::SELF_FIRST
11);
12
13foreach ($iterator as $key => $value) {
14    $indent = str_repeat('    ', $iterator->getDepth());
15    if ($iterator->hasChildren()) {
16        // 親要素('citrus'や'berries')が先に処理される
17        echo $indent . "$key :" . PHP_EOL;
18    } else {
19        // 次に子要素が処理される
20        echo $indent . $key . ' => ' . $value . PHP_EOL;
21    }
22}

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

RecursiveIteratorIterator::SELF_FIRST は、イテレータの走査順序を指定するための整数定数です。この定数を指定すると、各イテレータ自身を先に処理してから、その子要素を再帰的に処理する順序になります。