개요
array_uintersect() 함수는 사용자가 직접 정의한 비교 함수(callback)를 활용하여 여러 배열의 값을 비교한 뒤, 그 교집합을 새로운 배열로 반환하는 PHP 내장 함수입니다. 즉, 첫 번째 배열의 값 중에서 나머지 모든 배열에도 공통으로 존재하는 값만 추려서 반환하며, 이때 첫 번째 배열의 키는 그대로 유지됩니다.
구문
array_uintersect(arr1, arr2, arr3, … , compare_func)
매개변수
arr1 − 비교의 기준이 되는 첫 번째 배열입니다.
arr2 − 첫 번째 배열과 비교할 두 번째 배열입니다.
arr3 − 필요에 따라 추가로 비교할 더 많은 배열들입니다.
compare_func − 값의 동일 여부를 판단할 사용자 정의 비교 함수입니다. 이 함수는 첫 번째 인수가 두 번째 인수보다 작으면 0보다 작은 정수, 같으면 0, 크면 0보다 큰 정수를 반드시 반환해야 합니다.
반환값
array_uintersect() 함수는 첫 번째 배열의 값 중에서 다른 모든 배열에도 공통으로 존재하는 값을 요소로 갖는 배열을 반환합니다. 반환되는 배열은 첫 번째 배열의 원래 키를 보존한다는 점이 특징입니다.
예제
아래 예제는 두 개의 연관 배열을 사용자 정의 비교 함수와 함께 array_uintersect() 함수로 비교하는 코드입니다.
<?php
function compare_func($a, $b) {
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$arr1 = array("p"=>"one","q"=>"two","r"=>"three");
$arr2 = array("p"=>"three","q"=>"four","s"=>"three");
$res = array_uintersect($arr1, $arr2, "compare_func");
print_r($res);
?>실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Array ( [r] => three )
결과 해설
$arr1에는 "one", "two", "three" 세 개의 값이 있지만, 이중 $arr2에도 동일하게 존재하는 값은 "three"뿐입니다. 따라서 최종 결과 배열에는 키 "r"과 함께 값 "three"만 남게 됩니다. 만약 두 배열 사이에 일치하는 값이 하나도 없다면 빈 배열이 반환됩니다.
참고: 관련 함수
array_intersect() − 기본 비교 방식으로 배열의 교집합을 구합니다.
array_uintersect_assoc() − 값뿐 아니라 키까지 비교 함수로 검사하여 교집합을 구합니다.
array_udiff() − 사용자 정의 비교 함수로 배열의 차집합을 구할 때 사용합니다.