多次元配列のトラバーサルの詳細: 最初に一致するキーを発見する
PHP プログラミングの領域では、多次元配列のトラバースは迷宮のようなタスクになる場合があります。最初に一致したキーに関連付けられた値を取得するという目的に直面した場合、開発者は再帰的なアプローチにつまずく可能性があります。以下に概説するそのようなメソッドの 1 つは、再帰的実装に潜在的な落とし穴があります。
<br>private function find($needle, $haystack) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">foreach ($haystack as $name => $file) { if ($needle == $name) { return $file; } else if(is_array($file)) { //is folder return $this->find($needle, $file); //file is the new haystack } } return "did not find";
}
この関数は、連想配列を再帰的に探索し、入力された針と一致するキーを探し、その対応する値を返すことを目的としています。ただし、再帰は不完全なままであり、質問は未解決のままです。
合理化されたソリューションのための最新の PHP の採用
進化し続ける PHP 環境において、新しいバージョンではより多くの機能が提供されます。配列トラバーサルに対する効率的かつ洗練されたアプローチ。 PHP 5.6 以降向けに調整された次のスニペットを考えてみましょう:
<br>function recursiveFind(array $haystack, $needle)<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$iterator = new RecursiveArrayIterator($haystack); $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST ); foreach ($recursive as $key => $value) { if ($key === $needle) { return $value; } }
}
この最新化されたコードは、ジェネレーターの機能を利用して再帰的走査プロセスを簡素化します。すべての配列要素をシームレスに繰り返し、対応する値を即座に返す前にニードルをフィルタリングします。
ジェネレーターによる機能の拡張
PHP 5.6 の出現によりジェネレーターが導入され、機能が強化されました。開発者は、最初に見つかったものだけでなく、再帰的な検索から複数の一致を生成できるようになります。次のスニペットは、この強化された機能を示しています。
<br>function recursiveFind(array $haystack, $needle)<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$iterator = new RecursiveArrayIterator($haystack); $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST ); foreach ($recursive as $key => $value) { if ($key === $needle) { yield $value; } }
}
// 使用法
foreach (recursiveFind($haystack, $needle) as $value) {
// Use `$value` here
}
これで、次のことができます最初の一致に限定されるのではなく、一致するすべてのキーと値のペアを反復処理します。これにより関数の多用途性が拡張され、多次元配列からより包括的なデータを取得できるようになります。
以上が多次元 PHP 配列で最初に一致するキーを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。