매일 개발에서, 우리는 종종 두 배열을 비교하고 그들 사이의 다른 요소를 찾아야하는 상황을 종종 만나게됩니다. 현재 배열에서 존재하지만 다른 배열에 존재하지 않는 요소 만 찾으면 Array_Diff () 함수로 충분합니다. 그러나 알아야 할 경우 Array_Diff ()를 조금 결합해야합니다.
평신도 측면에서 대칭 적 차이 세트는 두 세트의 비 반복 요소 모음입니다. 예를 들어:
$array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];
이 두 배열의 대칭 차이 세트는 [1, 2, 5, 6] 이 4 개의 숫자가 배열 중 하나에 존재하며 다른 숫자에는 존재하지 않기 때문입니다.
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 () 를 추가 할 수 있습니다.
$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 프로젝트에서 도움이되기를 바랍니다!