ホームページ >バックエンド開発 >PHPの問題 >PHPで2つの配列が同じかどうかを判断する方法

PHPで2つの配列が同じかどうかを判断する方法

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

PHP は、動的 Web サイト、Web アプリケーション開発、コマンド ライン インターフェイスなどの多くの分野で使用できる、広く使用されているサーバー側スクリプト言語です。 PHP 開発では、配列が同じかどうかを判断することが一般的な問題になります。この記事では、PHP で 2 つの配列が同じかどうかを判断する方法を紹介します。

PHP では、配列は値のセットまたはキーと値のペアのセットを格納するために使用される非常に重要なデータ型です。 PHP はさまざまな方法で配列を作成できます。最も一般的な方法は、配列リテラルを使用するか、array() 関数を使用することです。例:

$arr1 = [1, 2, 3];
$arr2 = array('a' => 1, 'b' => 2, 'c' => 3);

2 つの配列が同じかどうかを判断するには、通常、それらの配列に含まれる要素と要素の値が同じかどうかを判断します。 PHP にはこの目的を達成するためのさまざまなメソッドが用意されており、その使用方法を以下に紹介します。

方法 1: == 演算子を使用する

PHP の == 演算子は、2 つの配列が等しいかどうかを比較するために使用できます。 2 つの配列に同じ要素が含まれているが順序が異なる場合も、== 演算子はそれらの要素を等しいとみなします。例:

$arr1 = [1, 2, 3];
$arr2 = [3, 2, 1];
if ($arr1 == $arr2) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}

$arr1 と $arr2 には同じ要素 (1、2、3) が含まれていますが、順序が異なるため、上記のコードの出力は「2 つの配列は等しい」になります。

配列にネストされた配列が含まれる場合、== 演算子は、ネストされた配列の値ではなく参照のみを比較します。例:

$arr1 = [[1, 2], [3, 4]];
$arr2 = [[1, 2], [3, 4]];
if ($arr1 == $arr2) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}

$arr1 と $arr2 には異なるネストされた配列、つまり [1, 2]、[3, 4]、および[ 1、2]、[3、4]。

方法 2: === 演算子を使用する

== 演算子とは異なり、PHP の === 演算子も 2 つの配列の型を比較します。 2 つの配列が同じ要素と同じ要素値を持ち、それらの型も同じである場合、=== 演算子はそれらが等しいとみなします。例:

$arr1 = [1, 2, 3];
$arr2 = array(1, 2, 3);
if ($arr1 === $arr2) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}

$arr1 と $arr2 には同じ要素が含まれていますが、型が異なるため、上記のコードの出力は「2 つの配列は等しくありません」となります。$arr1 は配列リテラルであり、 $ arr2 は、array() 関数を使用して作成された配列です。

配列にネストされた配列が含まれる場合、=== 演算子はネストされた配列の型と値も比較します。例:

$arr1 = [[1, 2], [3, 4]];
$arr2 = [[1, 2], [3, 4]];
if ($arr1 === $arr2) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}

上記のコードの出力結果は「2 つの配列は等しくない」であり、その理由は方法 1 の場合と同じです。

方法 3: array_diff 関数を使用する

上記の方法では 2 つの配列が等しいかどうかを判断できますが、すべての要素を比較する必要があるため、この方法は時間がかかるか、大きな配列の場合はメモリを大量に消費する可能性があります。 . スペースを取りすぎます。この場合、PHP の array_diff 関数を使用して配列を比較できます。この関数は、2 つの配列の差、つまり、一方の配列には含まれるが、もう一方の配列には含まれない要素の差を計算するために使用されます。 2 つの配列の差が空の場合、それらは等しいです。例:

$arr1 = [1, 2, 3];
$arr2 = [3, 2, 1];
if (empty(array_diff($arr1, $arr2)) && empty(array_diff($arr2, $arr1))) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}

上記のコードの出力結果は「2 つの配列が等しい」です。理由は方法 1 の場合と同じです。

配列にネストされた配列が含まれている場合は、array_diff 関数を再帰的に呼び出すことができます。例:

$arr1 = [[1, 2], [3, 4]];
$arr2 = [[3, 4], [1, 2]];
if (empty(array_diff($arr1, $arr2)) && empty(array_diff($arr2, $arr1))) {
    echo "两个数组相等";
} else {
    echo "两个数组不相等";
}

function array_equal($arr1, $arr2) {
    if (count($arr1) != count($arr2)) {
        return false;
    }
    $d1 = array_diff($arr1, $arr2);
    $d2 = array_diff($arr2, $arr1);
    if (!empty($d1) || !empty($d2)) {
        return false;
    }
    foreach ($arr1 as $key => $value) {
        if (is_array($value) && is_array($arr2[$key])) {
            if (!array_equal($value, $arr2[$key])) {
                return false;
            }
        } else if ($value !== $arr2[$key]) {
            return false;
        }
    }
    return true;
}

上記のコードの array_equal 関数は、2 つの配列を再帰的に比較できます。ネストされた配列の処理では、array_diff 関数を呼び出して差分セットを比較します。

この記事では、2 つの配列が等しいかどうかを判断するための PHP の 3 つの方法、つまり == 演算子を使用する方法、=== 演算子を使用する方法、array_diff 関数を使用する方法を紹介します。配列が等しいかどうかを判断する必要がある場合、特定の状況に応じてこれらの方法のいずれかを選択できます。

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

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