ホームページ >バックエンド開発 >PHPチュートリアル >多次元配列内の特定のキーに関連付けられた値を効率的に見つけるにはどうすればよいですか?

多次元配列内の特定のキーに関連付けられた値を効率的に見つけるにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 14:44:58818ブラウズ

How Can I Efficiently Find a Value Associated with a Specific Key in a Multidimensional Array?

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

複雑な多次元配列で特定のキーを検索するのは、困難な作業となる場合があります。提供されているようなカスタム再帰関数は、この課題に対処しようとします。ただし、再帰の実装で問題が発生する可能性があります。

元の関数は配列を走査し、検索されたキーが見つかった場合は、そのキーに関連付けられた値を返します。ただし、値が配列 (フォルダーを表す) の場合は、サブ配列 (新しい干し草の山) 上でそれ自体を再帰的に呼び出します。この再帰は問題になる可能性があります。

潜在的な解決策には、PHP の RecursiveArrayIterator を活用することが含まれます。バージョン 5.6 以降では、この反復子を利用することで、より効率的で信頼性の高いアプローチが提供されます。

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;
        }
    }
}

この関数は再帰的に反復され、配列全体のキーと値を検査します。一致するキーが見つかると、対応する値を返します。

また、PHP 5.6 以降の場合、ジェネレーターを使用すると、複数の一致するキーの検索が容易になります。

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;
        }
    }
}

ジェネレーターを使用すると、次のことができます。最初の値だけでなく、一致するすべての値を反復処理します。この機能は、複雑で深くネストされた配列を処理する場合に有用であることがわかります。

以上が多次元配列内の特定のキーに関連付けられた値を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。