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

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

作成日: 更新日:

基本的な使い方

『hasChildrenメソッドは、イテレータが指す現在の要素が、さらに子要素を持つかどうかを判定するメソッドです。このメソッドは RecursiveIterator インターフェースで定義されており、多次元配列やディレクトリ構造のような階層的なデータを再帰的に処理する際に不可欠な役割を果たします。RecursiveRegexIteratorのインスタンスに対してこのメソッドを呼び出すと、内部的にラップしているイテレータの hasChildren メソッドが実行されます。もし現在の要素が子要素(例えば、配列内の別の配列や、ディレクトリ内のサブディレクトリなど)を持っている場合は true を、持っていない場合は false を返します。この戻り値は、多くの場合 RecursiveIteratorIterator によって内部的に利用され、再帰処理を続行するか、次の兄弟要素へ進むかを決定するために使われます。hasChildren メソッド自体は正規表現によるフィルタリングを行わず、あくまで構造としての子の有無を確認することに特化しています。このメソッドに引数はありません。

構文(syntax)

1<?php
2
3$array = [
4    'non-match',
5    'match-1',
6    'parent' => [
7        'child-match-1',
8        'child-non-match',
9        'child-match-2'
10    ],
11    'match-2'
12];
13
14$arrayIterator = new RecursiveArrayIterator($array);
15
16// 'match'を含む要素のみを対象とするイテレータ
17$regexIterator = new RecursiveRegexIterator($arrayIterator, '/match/', RecursiveRegexIterator::GET_MATCH);
18
19// 親ノードを先に処理するように設定
20$iterator = new RecursiveIteratorIterator($regexIterator, RecursiveIteratorIterator::SELF_FIRST);
21
22foreach ($iterator as $key => $value) {
23    // 現在の要素が子を持つ(=イテレート可能である)かを確認する
24    if ($iterator->hasChildren()) {
25        echo "Key '$key' is a parent node and has children." . PHP_EOL;
26    } else {
27        echo " - Key '$key' is a leaf node with value: " . $value[0] . PHP_EOL;
28    }
29}

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

このメソッドは、現在のイテレータ位置に子要素が存在するかどうかを示す論理値(trueまたはfalse)を返します。