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

多次元 PHP 配列のキーと値のペアに基づいてサブ配列を効率的に見つけるにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 20:39:18307ブラウズ

How to Efficiently Find Subarrays Based on Key-Value Pairs in Multidimensional PHP Arrays?

多次元 PHP 配列のキーと値のペアに基づいてサブ配列を検索する

多次元配列を走査する場合、ベースの特定のサブ配列を見つけるのが難しい場合があります。キーと値のペアで。ただし、配列の深さに関係なく、これを再帰的に行う効率的な方法があります。

関数の実装:

指定された条件を満たす部分配列を検索する関数を作成しましょう。 :

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

    if (is_array($array)) {
        // Check if the current subarray matches
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        // Recursively search inner subarrays
        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"));

キー 'name' と値 'cat を持つサブ配列を検索できます。 1':

$found = search($arr, 'name', 'cat 1');
print_r($found);

出力:

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

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

)

効率の考慮事項:

特に次の場合に効率を向上させるため大きな配列を扱う場合、配列のマージを回避することで関数を最適化できます。代わりに、再帰呼び出しの結果を一時配列に保存できます。

function search_optimized($array, $key, $value)
{
    $results = [];
    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);
    }
}

結果の配列を参照渡しすることで、関数は最終結果を効率的に構築できます。

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

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