ホームページ > バックエンド開発 > PHPチュートリアル > PHP で多次元配列内のキー値を効率的に検索するにはどうすればよいですか?

PHP で多次元配列内のキー値を効率的に検索するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-31 00:07:29
オリジナル
778 人が閲覧しました

How to Efficiently Search for Key Values in Multidimensional Arrays in PHP?

一致するキー値を多次元配列で検索する

特定のキーとそれに対応する値を検索するために多次元配列を走査するとき、一般的に次のような問題が発生します。再帰の問題。次のサンプル メソッドを考えてみましょう。

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート