PHP에는 배열 차이 세트를 처리하는 방법에는 여러 가지가 있습니다. 공통 Array_diff () 함수 외에도 Array_flip () 및 array_diff_key () 함수를 사용하여 "키"를 통해 유연한 차이 세트 계산을 달성 할 수 있습니다. 이 방법은 두 배열 사이의 "키 값 일치 차이"를 다룰 때 특히 효율적이고 실용적입니다.
Array_flip ()는 배열의 키와 값을 교환합니다 . 이는 원래 값이 키가되고 키가 값이 될 것임을 의미합니다.
$input = ['apple' => 'red', 'banana' => 'yellow'];
$result = array_flip($input);
// 산출:['red' => 'apple', 'yellow' => 'banana']
참고 : 원래 배열에 중복 값이있는 경우 Array_flip ()는 복제물을 폐기하고 마지막 값 만 보유합니다.
Array_Diff_Key ()는 두 개 이상의 배열의 키를 비교하고 첫 번째 배열에 존재하지만 다른 배열에는 나타나지 않는 키 값 쌍을 반환하는 데 사용됩니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 99];
$result = array_diff_key($array1, $array2);
// 산출:['a' => 1, 'c' => 3]
두 개의 배열이 있고 첫 번째 배열에서 고유 한 값 (즉, 차이 세트)을 찾고 싶다고 가정하면 Array_flip () 과 Array_diff_key () 의 조합을 영리하게 사용하여 달성 할 수 있습니다.
$groupA = ['apple', 'banana', 'cherry'];
$groupB = ['banana', 'grape'];
// 값을 키로 변환하십시오
$flippedA = array_flip($groupA);
$flippedB = array_flip($groupB);
// 차동 조작(통과하다 key 차이점)
$diff = array_diff_key($flippedA, $flippedB);
// 일반 값 배열로 복원됩니다
$uniqueToA = array_keys($diff);
print_r($uniqueToA);
Array
(
[0] => apple
[1] => cherry
)
우리는 $ GroupA 에 있지만 $ groupB 에서는 가치를 성공적으로 발견했습니다.
이 방법은 다음 시나리오에 매우 적합합니다.
두 라벨 배열의 차이점을 신속하게 찾으십시오.
사용자 권한 필터링 (사용자가 권한이 있지만 모듈이 사용되지 않은 기능을 찾아냅니다);
다중 옵션 비교 차이 등을 형성합니다.
예를 들어, 사용자 권한 시스템을 개발하고 있으며 현재 사용자의 권한은 다음과 같습니다.
$userPermissions = ['edit', 'delete', 'create'];
특정 모듈에서 지원하는 작업은 다음과 같습니다.
$moduleSupports = ['edit', 'create'];
사용자가 보유한 권한을 찾을 수 있지만 모듈은 동일한 방식으로 지원하지 않습니다.
$diff = array_keys(array_diff_key(
array_flip($userPermissions),
array_flip($moduleSupports)
));
// 산출 ['delete']
PHP는 평가에 직접 사용되는 차이 세트를 제공하지만, 좀 더 세련된 시나리오 (예 : 값이 고유 한시기)에서는 Array_flip ( ) 및 Array_diff_key () 의 조합이 효율적일뿐만 아니라보다 유연한 작동 방법을 제공합니다.
이러한 종류의 트릭은 특히 대형 어레이를 처리하거나 연산자를 비교할 때 특히 더 높은 성능을 가져올 수 있습니다.