一致するキー値を多次元配列で検索する
特定のキーとそれに対応する値を検索するために多次元配列を走査するとき、一般的に次のような問題が発生します。再帰の問題。次のサンプル メソッドを考えてみましょう。
<code class="php">private function find($needle, $haystack) { 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"; }</code>
このメソッドは、連想配列内のキーを見つけて、それに関連付けられた値を返すことを目的としています。ただし、その再帰的アプローチには潜在的な問題があります。
これを解決するには、PHP の新しい機能を使用して、より現代的で効率的なソリューションを採用できます。
<code class="php">function recursiveFind(array $haystack, $needle) { $iterator = new RecursiveArrayIterator($haystack); $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST ); foreach ($recursive as $key => $value) { if ($key === $needle) { return $value; } } }</code>
このメソッドは再帰と反復子を利用します。配列を効率的に走査し、最初に一致するキーを見つけます。
また、最初の一致だけではなく、すべての一致を反復処理したい場合は、PHP 5.6 のジェネレーターを使用できます。
<code class="php">function recursiveFind(array $haystack, $needle) { $iterator = new RecursiveArrayIterator($haystack); $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST ); foreach ($recursive as $key => $value) { if ($key === $needle) { yield $value; } } } // Usage foreach (recursiveFind($haystack, $needle) as $value) { // Use `$value` here }</code>
このアプローチを使用すると、配列内の一致するすべての値をエレガントに反復できます。
以上がPHP で多次元配列内のキー値を効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。