[PHP] array_intersect: 배열 교집합 구하기

개요

#array_intersect 함수는 그 이름에서 직관적으로 알 수 있듯이 #교집합을 구해주는 #PHP 함수입니다. 값을 비교할 배열을 두 개 이상 넣으면 그 교집합을 반환해주는 단순한 구조를 가지고 있습니다.

사용방법

#array_intersect 함수의 기본 사용법은 아래와 같이 간단합니다.

array_intersect( $array1, $array2, [$array3], [ ... ] );

#배열을 비교하는 작업이니 당연히 배열이 두 개 이상 있어야 합니다. 2개의 배열을 차례대로 넣으면 그 두 배열의 값을 비교해서 두 배열에 모두 존재하는 값들을 모아 배열 형식으로 반환합니다.

예제

 //example 1
$arr1 = array( 'a', 'b', 'c' );
$arr2 = array( 'c', 'd' );
$final = array_intersect( $arr1, $arr2 );

// output
$final = array( 'c' ); 

$arr1 과 $arr2 에 공통으로 들어가 있는 c 값이 결과물로 배출 됩니다.

주의사항

하지만 주의 해야 할 점이 있는데, 상식적으로 배열의 교집합이라고 하면 배열 A와 배열 B를 비교하든지, 배열 B와 배열 A를 비교하든지 같은 결과가 나와야 한다고 생각 할 수 있습니다.

하지만 #array_intersect 에서는 기준이 되는 배열(array1)과 비교 대상이 되는 배열(array2, … )이 각각 존재하기 때문에 순서를 잘 생각해서 투입해야 원하는 결과를 얻을 수 있습니다.

//example 1
$arr1 = array( 1, 2, 3, 3 );
$arr2 = array( 1, 3 );
$final = array_intersect( $arr1, $arr2 );

//output 1
$final = array( 1, 3, 3 );

//example 2
$arr1 = array( 1, 2, 3, 3 );
$arr2 = array( 1, 3 );
$final = array_intersect( $arr2, $arr1 );

//output 2
$final = array( 1, 3 );

위 예제 1번과 2번의 차이를 느낄 수 있으시겠나요. #array_intersect 함수는 기준이 되는 배열(첫번째 파라미터에 들어가는 배열)의 값을 하나하나 차례대로 비교하면서, 비교 대상이 되는 배열에 해당 값이 있으면 (그 값이 이미 결과 배열에 있든 말든 상관 없이) 결과로 출력될 배열에 하나씩 쌓는다고 생각하면 됩니다.

참고자료