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

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

DDD
DDDオリジナル
2024-12-20 21:26:19915ブラウズ

How to Efficiently Search for Key-Value Pairs in Multidimensional PHP Arrays?

多次元 PHP 配列でのキーと値のペアの検索

PHP の多次元配列は、特に特定のキーを検索する場合にナビゲートするのが難しい場合があります-値のペア。この包括的なガイドでは、配列のネストの深さに関係なく、指定されたキーと値のペアを含むすべてのサブ配列を迅速に取得するための効率的な方法を紹介します。

提案された解決策は、配列とキーを受け取る search という名前の再帰関数です。 、およびパラメータとしての値。キーと値のペアが配列の現在のレベルに存在するかどうかを確認し、存在する場合は現在のサブ配列を結果に追加します。その後、各サブ配列を反復処理し、それ自体を再帰的に呼び出して検索をより深いレベルに拡張します。

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}

再帰を使用することにより、検索関数は配列構造全体を探索し、一致するすべてのキーと値のペアが確実に検索されます。

たとえば、次のサンプル配列があるとします:

$arr = array(0 => array(id=>1,name=>"cat 1"),
             1 => array(id=>2,name=>"cat 2"),
             2 => array(id=>3,name=>"cat 1"));

そしてkey=name および value="cat 1" の場合、関数は次を返します:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => cat 1
        )

    [1] => Array
        (
            [id] => 3
            [name] => cat 1
        )

)

効率を高めるために、別の実装では、別の配列を作成するのではなく、再帰呼び出しの結果を単一の $results 配列にマージします。

function search($array, $key, $value)
{
    $results = array();
    search_r($array, $key, $value, $results);
    return $results;
}

function search_r($array, $key, $value, &$results)
{
    if (!is_array($array)) {
        return;
    }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
}

パラメータ リストのアンパサンド & は参照渡しを示し、すべての再帰呼び出しで同じ $results が変更されることに注意してください。 array.

この堅牢で汎用性の高いソリューションにより、開発者は深さや複雑さに関係なく、多次元 PHP 配列内のキーと値のペアをシームレスに検索できます。

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

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