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

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

作成日: 更新日:

基本的な使い方

keyメソッドは、フィルタリング対象の内部イテレータが指している現在の要素のキーを取得する処理を実行するメソッドです。RecursiveFilterIteratorクラスは、再帰的なデータ構造を順番に処理しながら、独自のフィルタリング条件に基づいて要素を選択するために利用されます。このイテレータをforeach文などで走査する際にkeyメソッドを呼び出すと、その時点で処理対象となっている要素のキーが返されます。返されるキーの型は、元となるデータ構造によって異なり、例えば配列であれば整数インデックスや文字列キーが該当します。このメソッドの動作は、acceptメソッドで定義されたフィルタリング条件の評価結果とは独立しており、フィルタリングされる前の内部イテレータの現在のポインタが示す位置のキーをそのまま返します。そのため、イテレーション中に各要素のキー情報を利用して特定の処理を行いたい場合や、現在の処理位置を正確に把握するために重要な役割を果たします。

構文(syntax)

1<?php
2
3// RecursiveFilterIterator を継承して、フィルタのルールを定義するクラス
4class MyKeyFilter extends RecursiveFilterIterator
5{
6    // この accept メソッドは、イテレータ内の各要素を処理する際に自動的に呼び出されます。
7    public function accept(): bool
8    {
9        // RecursiveFilterIterator::key() を使って現在の要素のキーを取得します。
10        // ここでは、キーが 'allowed' という名前の場合にのみ true を返し、
11        // その要素が反復処理の対象となるようにフィルタリングします。
12        return $this->key() === 'allowed';
13    }
14}
15
16// フィルタリング対象の多次元配列
17$data = [
18    'allowed' => 'この値は表示されます',
19    'denied'  => 'この値は表示されません',
20    'nested'  => [
21        'allowed' => 'このネストされた値も表示されます',
22        'denied'  => 'この値も表示されません'
23    ]
24];
25
26// 配列から再帰的なイテレータを作成
27$arrayIterator = new RecursiveArrayIterator($data);
28
29// 作成したカスタムフィルタを使ってイテレータをラップ
30$filterIterator = new MyKeyFilter($arrayIterator);
31
32// フィルタリングされた結果を再帰的に処理するためのイテレータ
33$recursiveIterator = new RecursiveIteratorIterator($filterIterator);
34
35// フィルタリングされた結果をループ処理で出力
36foreach ($recursiveIterator as $key => $value) {
37    // MyKeyFilter::accept() で true が返された要素のみがここに来る
38    printf("キー '%s' の値: %s\n", $key, $value);
39}
40
41?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

mixed

このメソッドは、現在の要素のキーを返します。キーの型は、フィルタリングされた要素のキーの型に依存します。

【PHP8.x】keyメソッドの使い方 | いっしー@Webエンジニア