現在の位置: ホーム> 最新記事一覧> array_diff()は、値タイプを区別するときに厳密に一致しますか?

array_diff()は、値タイプを区別するときに厳密に一致しますか?

M66 2025-06-06

毎日の開発では、 array_diff()は非常に実用的なPHPビルトイン機能です。 2つ以上の配列を比較するために使用でき、最初の配列で値を返しますが、後続の配列では返されません。これは、データのフィルタリング、リストの違いなどの比較などのシナリオで非常に一般的です。

質問は次のとおりです。Array_diff ()は、値を比較するときに厳密なタイプマッチングを実行しますか?言い換えれば、異なるタイプのアイテムですが、同じ値が同じと見なされますか、それとも異なりますか?

1。array_diff ()の値比較メカニズム

PHPでは、 array_diff()は「非厳格な」比較を使用します。つまり、2つの値が等しいかどうかを判断するときにデータ型を比較しませんが、値が「等しい」かどうかにのみ焦点を当てます。

この比較方法は、PHPの「ゆるい比較」と呼ばれ、 ===ではなく、 ==演算子を使用して行われた判断と同様に動作します。

サンプルコード:

 <?php
$array1 = [1, 2, 3, "4"];
$array2 = ["1", 2, 4];

$result = array_diff($array1, $array2);
print_r($result);
?>

出力結果:

 Array
(
    [2] => 3
    [3] => 4
)

この例では:

  • 1 (整数)および「1」 (文字列)は等しいと見なされるため、ろ過されます。

  • 3「3」$ array2ではないため、予約されています。

  • 「4」4は等しいと見なされ、ろ過されます。

結論:PHPのarray_diff()は、厳密なタイプの比較を実行しません。

2。厳密なタイプの比較を使用したい場合はどうすればよいですか?

array_diff()自体は厳密な比較をサポートしていませんが、PHPは別の関数array_diff_assoc()を提供します。これは、値の比較に加えてキー名を比較します。

ただし、値の厳密な比較のみを気にする場合は、 array_udiff()を使用して、カスタム比較関数との厳密な比較を実現できます。

サンプルコード:

 <?php
$array1 = [1, 2, 3, "4"];
$array2 = ["1", 2, 4];

$result = array_udiff($array1, $array2, function ($a, $b) {
    if ($a === $b) return 0;
    return ($a > $b) ? 1 : -1;
});

print_r($result);
?>

出力結果:

 Array
(
    [0] => 1
    [2] => 3
    [3] => 4
)

この例では、 1 (int)と「1」 (文字列)は異なる値として扱われるため、 1は保存されます。これにより、厳密なタイプの比較の目的が達成されます。

3。実用的な例:データフィルタリング用

ユーザー(すべての文字列)によってアップロードされた製品IDのリストがあり、データベースに既に存在するID(統合)を削除する必要があるとします。厳格なマッチングで誤ったマッチングを避けることができます。

 <?php
$uploadedIDs = ["101", "102", "103"];
$existingIDs = [101, 104];

$diff = array_udiff($uploadedIDs, $existingIDs, function ($a, $b) {
    return $a === $b ? 0 : ($a > $b ? 1 : -1);
});

// 1つを作成する必要があるとします URL 残りを見せます ID
$url = "https://m66.net/products?ids=" . implode(",", $diff);
echo $url;
?>

出力URL:

 https://m66.net/products?ids=101,102,103

まとめ

  • array_diff()は、型の違いに関係なく、ゆるい比較を使用します。

  • 値タイプを厳密に一致させる必要がある場合は、 array_udiff()をカスタム比較関数で使用できます。

  • ユーザーデータとタイプに敏感なデータフィルタリングを扱う場合、論理的な脆弱性を回避するために厳格な比較を使用することをお勧めします。

この記事が、PHPの配列差関数の動作メカニズムを理解するのに役立つことを願っています!