PHPで2つの配列が等しいかどうかを判断する方法

PHPz
リリース: 2023-04-19 11:08:53
オリジナル
2554 人が閲覧しました

PHP では、2 つの配列が等しいかどうかを判断することはそれほど難しくありませんが、いくつかの詳細に注意する必要があります。この記事では、2 つの配列の内容を比較するさまざまな方法を紹介し、いくつかの一般的な問題と解決策を検討します。

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

PHP では、== 演算子を使用して 2 つの配列が等しいかどうかを比較できます。この演算子は、2 つの配列のすべてのキーと値を比較し、ブール値を返します。両方の配列のキーと値が完全に等しい場合は true を返し、そうでない場合は false を返します。以下に例を示します。

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => 1, 'b' => 2, 'c' => 4);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are not equal
ログイン後にコピー

上記の例では、$key3 => $value3 を除き、$array1 と $array2 の両方に同じキーと値があります。したがって、それらは等しくありません。

== 演算子の比較順序は重要ではないことに注意してください。以下は、2 つのキーの順序は異なるが、それらの値が同じであることを示す別の例です:

$array1 = array('a' => 1, 'b' => 2);
$array2 = array('b' => 2, 'a' => 1);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal
ログイン後にコピー

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

別の比較方法2 つの配列 これを行うには、=== 演算子を使用します。これと == 演算子を使用する場合の違いは、=== 演算子は 2 つの配列のキー値に対応するデータ型が同じかどうかを比較することです。以下に例を示します。

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => '1', 'b' => '2', 'c' => '3');

if ($array1 === $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are not equal
ログイン後にコピー

この例では、$array1 のすべての値は数値型ですが、$array2 のすべての値は文字列型です。したがって、それらは等しくありません。

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

2 つの配列を比較する別の方法は、array_diff() 関数を使用することです。この関数は、最初の配列に存在しない 2 番目の配列の要素を新しい配列として返します。返された配列が空の場合、2 つの配列は等しいです。以下に例を示します。

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => 1, 'b' => 2, 'c' => 3);

if (array_diff($array1, $array2) == array()) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal
ログイン後にコピー

この例では、array_diff() 関数は空の配列を返すため、それらは等しいです。

方法 4: シリアライズ関数を使用する

最後の方法は、serialize() 関数を使用することです。この関数は、変数を配列を含む文字列にシリアル化します。したがって、シリアル化後に文字列を比較することで、2 つの配列が等しいかどうかを判断できます。

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('a' => 1, 'b' => 2, 'c' => 3);

if (serialize($array1) === serialize($array2)) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal
ログイン後にコピー

このメソッドを使用する場合、2 つの配列内の要素の順序は異なっていても、それらのキーが異なる場合があることに注意してください。と値が同じ場合、このメソッドはそれらも不等であると判断します。

一般的な問題と解決策

2 つの配列を比較するときに、問題が発生することがあります。よくある問題と解決策のいくつかを以下に示します。

質問 1: 2 つの配列を比較するときにキーの順序を無視するにはどうすればよいですか?

2 つの配列内のキーの順序は異なっていても、それらの値は同じである場合があります。現時点では、== 演算子を使用して比較すると、明らかに正しい結果が得られません。この問題を解決するには、配列を比較する前に並べ替えて、キーの順序を無視できるようにします。

sort($array1);
sort($array2);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}
ログイン後にコピー

または、ksort() 関数を使用してキーで並べ替えます:

ksort($array1);
ksort($array2);

if ($array1 == $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}
ログイン後にコピー

質問 2: 2 つの配列のキーと値が同じであるが、データ型が同じであることを確認する方法キーが違うのですか?

=== 演算子を使用して 2 つの配列を比較する場合、キーと値が同じでもデータ型が異なる場合、それらは不等であると判断されます。例:

$array1 = array('1' => 'a', '2' => 'b');
$array2 = array(1 => 'a', 2 => 'b');

if ($array1 === $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are not equal
ログイン後にコピー

データ型が異なる場合でも、2 つの配列のキーと値が同じであることを確認するには、array_map() 関数を使用してキーを同じデータ型を指定して比較します。

$array1 = array('1' => 'a', '2' => 'b');
$array2 = array(1 => 'a', 2 => 'b');

function convert_key($key) {
    return (int) $key;
}

$array1 = array_combine(array_map('convert_key', array_keys($array1)), $array1);
$array2 = array_combine(array_map('convert_key', array_keys($array2)), $array2);

if ($array1 === $array2) {
    echo 'Arrays are equal';
} else {
    echo 'Arrays are not equal';
}

// Output: Arrays are equal
ログイン後にコピー

上記のコードでは、正しく比較できるように、array_map() 関数を使用して 2 つの配列のキーを整数型に変換します。

概要

PHP では、== 演算子を使用する、=== 演算子を使用する、array_diff() 関数を使用するなど、2 つの配列が等しいかどうかを判断する多くの方法があります。 Serialize() 関数などを使用します。これらのメソッドを使用する場合、特殊な状況が発生した場合、キーの順序を無視したり、キーのデータ型を処理したりするなど、問題を解決するためにいくつかのテクニックを使用する必要がある場合があることに注意してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!