現在の位置: ホーム> 最新記事一覧> 複数のarray_diff()を使用して配列の対称差セットを実装する方法?

複数のarray_diff()を使用して配列の対称差セットを実装する方法?

M66 2025-06-06

毎日の開発では、2つの配列を比較し、それらの間に異なる要素を見つける必要がある状況に遭遇することがよくあります。この時点で、別の配列にはないが、配列に存在する要素を見つけただけでは、 array_diff()関数で十分です。ただし、検索する必要がある場合は、 Array_diff()を少し組み合わせる必要があります。

対称差セットとは何ですか?

対称的な違いセットは、素人の用語では、2つのセットにおける非繰り返し要素のコレクションです。例えば:

 $array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];

これらの2つの配列の対称差セットは[1、2、5、6]です。これらの4つの数値は、1つの配列に存在し、もう1つには存在しないためです。

php array_diff()で実装

array_diff()は、最初の配列に存在するが、他の配列には存在しない値を見つけることができます。したがって、2つのarray_diff()を使用して、対称差のセットを取得できます。

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

// 探し出す array1 がある array2 何もありません
$diff1 = array_diff($array1, $array2);

// 探し出す array2 がある array1 何もありません
$diff2 = array_diff($array2, $array1);

// 2つの微分セットの結果をマージします
$symmetricDifference = array_merge($diff1, $diff2);

print_r($symmetricDifference);
?>

出力は次のとおりです。

 Array
(
    [0] => 1
    [1] => 2
    [4] => 5
    [5] => 6
)

ここのキーは連続していない場合があります。再インデックスする必要がある場合は、文を追加できます。

 $symmetricDifference = array_values($symmetricDifference);

実際のプロジェクトでのアプリケーション

メンバーシップシステムを構築しており、2つのユーザーグループ間のアクセス許可の違いを比較する必要があるとします。この方法では、さまざまな権限を見つけることができます。

 <?php
$userGroupA = ['read', 'write', 'delete'];
$userGroupB = ['read', 'export', 'import'];

$diff1 = array_diff($userGroupA, $userGroupB);
$diff2 = array_diff($userGroupB, $userGroupA);

$permissionDiff = array_merge($diff1, $diff2);
$permissionDiff = array_values($permissionDiff);

print_r($permissionDiff);

// 結果:['write', 'delete', 'export', 'import']
?>

ヒント:Array_unique()を使用して、さらに容易になります

対称差セットに相互に排他的な2つの違いを統合しますが、配列に重複要素がある場合、重複した結果も生成される場合があります。 Array_unique()を重複排除に追加できます。

 $symmetricDifference = array_unique(array_merge($diff1, $diff2));

要約します

2つのarray_diff()関数を組み合わせることにより、2つの配列の対称差セットを簡単に取得できます。この方法は明確かつ簡潔であり、許可システム、データ比較、その他のシナリオに特に適しています。

この方法を関数にカプセル化して、再利用性を向上させることができます。

 function symmetric_diff(array $a, array $b): array {
    return array_values(array_unique(array_merge(
        array_diff($a, $b),
        array_diff($b, $a)
    )));
}

// サンプルコール
$result = symmetric_diff([1, 2, 3], [2, 3, 4]);
print_r($result); // 出力:[1, 4]

このヒントがあなたのPHPプロジェクトであなたを助けることができることを願っています!