ホームページ  >  記事  >  バックエンド開発  >  PHPで値が2次元配列にあるかどうかを判断する方法

PHPで値が2次元配列にあるかどうかを判断する方法

PHPz
PHPzオリジナル
2023-04-18 09:05:36497ブラウズ

インターネットの継続的な発展に伴い、Web サイトの開発はますます一般的になりました。 PHP は非常に人気のある開発言語であり、多くの Web サイトが PHP を使用して開発されています。 PHP 開発では、一定量のデータを簡単に保存および検索できる 2 次元配列がよく使用されます。この記事では、PHP で値が 2 次元配列にあるかどうかを判断する方法を紹介します。

まず、2 次元配列の概念を理解する必要があります。簡単に言えば、2 次元配列は、各要素も配列である配列です。各サブ配列には対応するキー値があり、これらのサブ配列には 2 次元配列のキーを介してアクセスできます。たとえば、次は単純な 2 次元配列です。

$people = array(
    array(
        "name" => "John",
        "age" => 25,
        "gender" => "male"
    ),
    array(
        "name" => "Jane",
        "age" => 30,
        "gender" => "female"
    ),
    array(
        "name" => "Bob",
        "age" => 20,
        "gender" => "male"
    )
);

上記の 2 次元配列は 3 人の人物の情報を表し、各人物はサブ配列に格納されます。各サブ配列には 3 つのキー値があります。name は名前を表し、age は年齢を表し、gender は性別を表します。さて、この配列に人が含まれているかどうかを判断したいのですが、どうすればよいでしょうか?

簡単な方法は、foreach ループを使用してこの配列を反復処理することです。各サブ配列について、そのキー値が探している値と一致するかどうかを 1 つずつチェックできます。コードは次のようになります。

function in_array_2d($needle, $haystack) {
    foreach ($haystack as $item) {
        foreach ($item as $key => $value) {
            if ($value == $needle) {
                return true;
            }
        }
    }
    return false;
}

$person = array(
    "name" => "Jane",
    "age" => 30,
    "gender" => "female"
);

if (in_array_2d("male", $people)) {
    echo "The array contains a male person.";
} else {
    echo "The array does not contain a male person.";
}

if (in_array_2d($person, $people)) {
    echo "The array contains the person Jane.";
} else {
    echo "The array does not contain the person Jane.";
}

上記のコードは、検索する値と検索する 2 次元配列の 2 つのパラメーターを受け入れる in_array_2d 関数を定義します。関数内には 2 つの foreach ループがネストされており、すべてのサブ配列内のキー値を走査するために使用されます。一致する値が見つかった場合、関数は true を返し、それ以外の場合は false を返します。 2 番目の例では、探している人物に関する情報を表すために連想配列を使用していることに注意してください。

上記の実装は非常に単純ですが、あまり効率的ではありません。探している 2 次元配列が大きい場合、配列全体を走査すると非常に時間がかかることがあります。したがって、より効率的な方法が必要です。

より良い方法は、PHP の array_column 関数を使用することです。この関数は、配列内の指定された要素またはキーと値のペアを返すことができます。たとえば、上記の 2D 配列からすべての人の名前を取得したい場合は、次のコードを使用できます:

$names = array_column($people, "name");
print_r($names);

これにより、次のように出力されます:

Array
(
    [0] => John
    [1] => Jane
    [2] => Bob
)

さて、返された配列内で探している値を検索することで、それが 2 次元配列内にあるかどうかを判断できます。実装コードは次のとおりです。

function in_array_2d($needle, $haystack) {
    $values = array_column($haystack, null, 0);
    return in_array($needle, $values);
}

$person = array(
    "name" => "Jane",
    "age" => 30,
    "gender" => "female"
);

if (in_array_2d("male", $people)) {
    echo "The array contains a male person.";
} else {
    echo "The array does not contain a male person.";
}

if (in_array_2d($person, $people)) {
    echo "The array contains the person Jane.";
} else {
    echo "The array does not contain the person Jane.";
}

上記のコードは in_array_2d 関数を実装していますが、少し複雑です。まず、array_column 関数を使用して、検索対象の 2 次元配列内のすべての部分配列の最初の要素を取得し、それを新しい配列のキーとして使用します。このように、in_array 関数を使用して、探している値が新しい配列内にあるかどうかを確認できます。 2 番目の例では、探している人物に関する情報を表すために連想配列を使用していることに注意してください。

array_column 関数を使用する利点は、キーを指定することで部分配列内の特定の値を取得できることです。これは、2D 配列から特定の値を含む部分配列を簡単に見つけることができることを意味します。以下に例を示します。

$male = array_column($people, null, "gender")["male"];
print_r($male);

これは、男性の情報を含む部分配列を出力します。

上記の方法は、値が 2 次元配列内にあるかどうかを判断するために使用できますが、効率と可読性は異なります。 foreachループはおそらく最も理解しやすいですが、効率は低くなります。 array_column 関数は、大規模な 2 次元配列の場合により効率的ですが、実装にはより多くのコードが必要です。したがって、方法を選択するときは、どの方法がより適切であるかはケースバイケースで決定する必要があります。

以上がPHPで値が2次元配列にあるかどうかを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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