현재 위치: > 최신 기사 목록> 다중 Array_Diff ()를 사용하여 배열 대칭 차이 세트를 구현하는 방법?

다중 Array_Diff ()를 사용하여 배열 대칭 차이 세트를 구현하는 방법?

M66 2025-06-06

매일 개발에서, 우리는 종종 두 배열을 비교하고 그들 사이의 다른 요소를 찾아야하는 상황을 종종 만나게됩니다. 현재 배열에서 존재하지만 다른 배열에 존재하지 않는 요소 만 찾으면 Array_Diff () 함수로 충분합니다. 그러나 알아야 할 경우 Array_Diff ()를 조금 결합해야합니다.

대칭 차이 세트는 무엇입니까?

평신도 측면에서 대칭 적 차이 세트는 두 세트의 비 반복 요소 모음입니다. 예를 들어:

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

이 두 배열의 대칭 차이 세트는 [1, 2, 5, 6] 이 4 개의 숫자가 배열 중 하나에 존재하며 다른 숫자에는 존재하지 않기 때문입니다.

php array_diff ()와 함께 구현

Array_Diff ()는 첫 번째 배열에서 존재하지만 다른 배열에서는 존재하지 않는 값을 찾을 수 있습니다. 따라서 두 개의 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);

// 두 차동 세트의 결과를 병합하십시오
$symmetricDifference = array_merge($diff1, $diff2);

print_r($symmetricDifference);
?>

출력은 다음과 같습니다.

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

여기의 키는 연속적이지 않을 수 있습니다. 다시 표시 해야하는 경우 문장을 추가 할 수 있습니다.

 $symmetricDifference = array_values($symmetricDifference);

실제 프로젝트에 응용 프로그램

회원 시스템을 구축하고 있다고 가정하고 두 사용자 그룹 간의 권한 차이를 비교해야한다고 가정합니다. 이러한 방식으로 다른 권한을 찾을 수 있습니다.

 <?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 ()를 사용하여 자세한 내용을 추가로 사용하십시오

대칭 차이 세트에서 두 가지 상호 배타적 차이를 병합하지만 배열에 중복 요소가있는 경우 중복 결과가 생성 될 수 있습니다. 배열에 Array_unique () 를 추가 할 수 있습니다.

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

요약

두 개의 array_diff () 함수를 결합하여 두 배열의 대칭 차이 세트를 쉽게 얻을 수 있습니다. 이 방법은 명확하고 간결하며 권한 시스템, 데이터 비교 및 ​​기타 시나리오에 특히 적합합니다.

재사용 성을 향상시키기 위해이 방법을 함수로 캡슐화 할 수 있습니다.

 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 프로젝트에서 도움이되기를 바랍니다!