정의 및 사용 방법
- PHP 버전
- 4.0.1+
array_intersect() 함수는
비교 대상이 되는 배열과 한 개 이상의 다른 배열들의 공통(intersect, 교집합) 값을 찾아 배열로 반환하는 함수입니다.
이 함수는 배열들 간의 공통된 값을 비교할 때 활용되며, 주로 다음과 같은 용도로 사용됩니다.
- 두 개의 배열에서 공통으로 존재하는 값을 찾기
- 사용자가 입력한 값이 이미 존재하는지 확인하기
- 데이터베이스에서 중복된 값을 제거하기
특징
array_intersect()함수는 키가 아닌 값(Value)을 기준으로 배열의 공통 요소를 찾습니다. 이때, 느슨한 비교(==)를 사용하여 값의 타입이 달라도 내용이 같으면 일치하는 것으로 간주합니다.array_intersect()함수로 반환된 배열의 키는 비교 대상이 되는 원래 배열에서의 키가 그대로 보존됩니다.
기본 예제
array_intersect() 함수의 구현 방식을 정확히 이해하려면
인덱스 배열끼리의 비교,
연관 배열끼리의 비교,
인덱스 배열과 연관 배열의 비교
이 세 가지 작동 방식을 각각 살펴보는 것입니다.
인덱스 배열끼리의 비교
/* 인덱스 배열끼리의 비교 */
$index_array1 = [1, 2, 3, 4, 5]; // 비교 대상이 되는 배열
$index_array2 = [2, 3, 4, 6, 7];
$index_unique_value = array_intersect($index_array1, $index_array2);
print_r($index_unique_value);
Array
(
[1] => 2
[2] => 3
[3] => 4
)
연관 배열끼리의 비교
/* 연관 배열끼리의 비교 */
$assoc_array1 = [ // 비교 대상이 되는 배열
'a' => 'apple',
'b' => 'banana',
'c' => 'carrot',
'd' => 'date'
];
$assoc_array2 = [
'x' => 'carrot',
'b' => 'grape',
'y' => 'apple'
];
$assoc_unique_value = array_intersect($assoc_array1, $assoc_array2);
print_r($assoc_unique_value);
Array
(
[a] => apple
[c] => carrot
)
인덱스 배열과 연관 배열의 비교
/* 인덱스 배열과 연관 배열의 비교 */
$arr_idx = ['a', 'b', 'c']; // 비교 대상이 되는 배열
$arr_assoc = [
'x' => 'b',
'y' => 'c',
'z' => 'd'
];
$assoc_unique_value = array_intersect($assoc_array1, $assoc_array2);
print_r($assoc_unique_value);
Array
(
[1] => b
[2] => c
)
구문
array_intersect(array $array_1, array_2, $array_3, ...): array
매개변수
$array_1 |
필수. 비교 대상으로 하는 배열입니다. |
|---|---|
$array_2 |
필수(PHP 8.0.0 버전부터는 옵션). 첫 번째 배열을 비교 대상으로 하는 배열입니다.
PHP 8.0.0 버전부터의 변경 사항을 참조하세요. |
$array_3, ... |
옵션. 첫 번째 배열을 비교 대상으로 하는 배열에 비교 대상을 더 추가한 배열로 여러 배열을 추가할 수 있습니다. |
반환 값
비교 대상이 되는 배열과 한 개 이상의 다른 배열들의 공통 값을 찾아 배열로 반환합니다.
이때 반환된 배열의 키는 비교 대상이 되는 원래 배열에서의 키가 그대로 보존됩니다. 단, 인덱스 배열(숫자형 키만 있는 배열)의 경우 키는 0부터 다시 정렬됩니다.
만약 비교하는 다른 배열과 비교 대상이 되는 첫 번째 배열에서 공통으로 존재하는 값이 없을 경우에는 빈 배열을 반환합니다.
$array1 = [1, 2, 3, 4, 5];
$array2 = [6, 7];
$result = array_intersect($array1, $array2);
print_r($result); // Array ( )
PHP 8.0.0 버전부터의 변경 사항
PHP 8.0.0부터는 array_intersect() 함수를 단 하나의 매개변수만 사용하여 호출할 수 있게 되었습니다.
이전에는 최소 두 개의 매개변수가 필요했습니다.
- PHP 8.0.0 버전 이전에는 항상 적어도 두 개의 배열을 매개변수로 전달해야 합니다.
- PHP 8.0.0 버전부터는 단 하나의 배열만 전달할 수도 있음을 의미합니다.
$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueValues = array_intersect($array);
print_r($uniqueValues);
// PHP 8.0.0 이후 버전에서는 하나의 배열만 전달 가능
/* 출력:
Array
(
[0] => 1
[1] => 2
[2] => 2
[3] => 3
[4] => 4
[5] => 4
[6] => 5
)
*/
위의 예시 코드를 보면 $uniqueValues는 $array 배열 전체를 그대로 반환합니다.
array_intersect() 함수가 최소 두 개의 배열을 비교하여 교집합을 찾는데, 하나의 배열만 전달될 경우 그 배열 자체를 반환하기 때문입니다. 정확한 교집합을 찾기 위해서는 최소한 두 개의 배열이 필요합니다.
하나의 배열에 중복되는 값을 반환하려면 다음과 같이 할 수 있습니다.
$array = [1, 2, 2, 3, 4, 4, 5];
$counts = array_count_values($array);
$duplicates = array_filter($counts, function($count) {
return $count > 1;
});
print_r(array_keys($duplicates)); // Array ( [0] => 2 [1] => 4 )
위 코드에서 array_count_values() 함수를 사용하여 값의 횟수를 계산하고, array_filter() 함수를 사용하여 횟수가 1보다 큰 값을 찾아냅니다. 마지막으로 array_keys() 함수를 사용하여 중복된 값의 배열을 반환합니다. 이러한 방식으로 중복된 값을 반환할 수 있습니다.
주의할 점
array_intersect() 함수 사용 시 주의할 점을 살펴보겠습니다.
연관 배열에서의 키와 값 비교
array_intersect() 함수는 값만을 비교하므로, 연관 배열에서 키가 다르고 값만 일치하는 경우에는 그 값을 공통값으로 취급하게 됩니다. 이로 인해 연관 배열에서 주의해야 할 점이 발생할 수 있습니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['x' => 1, 'y' => 2, 'z' => 3];
$result = array_intersect($array1, $array2);
print_r($result); // 출력: Array ( [a] => 1 [b] => 2 [c] => 3 )
위의 코드에서 array_intersect() 함수는 값만을 비교하여 $array1와 동일한 키와 값을 반환합니다.
이는 키가 다르더라도 값이 일치하는 경우에는 해당 값을 결과 배열에 포함시킵니다.
키와 값이 모두 일치하는 경우를 찾으려면 array_intersect_assoc() 함수를 사용하세요.
배열 값에서 데이터 형식을 고려하지 않음
array_intersect() 함수는 값만을 비교하며 데이터 형식을 고려하지 않습니다. 예시 코드를 통해 설명하겠습니다.
$array1 = [1, 2, '3']; // '3'은 문자열
$array2 = [1, 2, 3]; // 3은 정수
$differences = array_intersect($array1, $array2);
print_r($differences); // Array ( [0] => 1 [1] => 2 [2] => 3 )
위의 코드에서 $array1과 $array2는 값 '3'을 포함하고 있지만, 데이터 형식이 서로 다릅니다. array_intersect() 함수는 값만을 비교하며 데이터 형식을 고려하지 않습니다.
활용 예제
array_intersect() 함수는 실전에서 다양한 상황에서 활용될 수 있습니다. 아래는 몇 가지 실전적인 예시들입니다.
데이터베이스의 중복 추출하기
$userIdsFromDatabase = [1, 2, 3, 4, 5];
$selectedUserIds = [2, 4, 6, 8, 10];
$commonUserIds = array_intersect($userIdsFromDatabase, $selectedUserIds);
print_r($commonUserIds); // Array ( [1] => 2 [3] => 4 )
위 예시에서는 데이터베이스에서 가져온 사용자 ID 배열과 선택된 사용자 ID 배열 간의 공통된 값을 찾아냅니다.
양식 입력의 유효성 검사
$submittedTags = ['php', 'javascript', 'html'];
$allowedTags = ['html', 'css', 'javascript', 'python'];
$validTags = array_intersect($submittedTags, $allowedTags);
print_r($validTags); // Array ( [2] => javascript [1] => html )
위 예시에서는 사용자가 제출한 태그 배열과 허용된 태그 배열 간의 공통된 값을 찾아냅니다. 이를 통해 양식 입력의 유효성을 검사할 수 있습니다.
사용자 권한 관리
$adminPermissions = ['read', 'write', 'delete', 'update'];
$userPermissions = ['read', 'write'];
$allowedPermissions = array_intersect($adminPermissions, $userPermissions);
print_r($allowedPermissions); // Array ( [0] => read [1] => write )
위 예시에서는 관리자와 사용자 간의 공통된 권한을 찾아냅니다. 이를 통해 사용자에게 부여될 수 있는 최대 권한을 식별할 수 있습니다.
상품 재고 관리
$availableProducts = ['product1', 'product2', 'product3', 'product4'];
$selectedProducts = ['product2', 'product4', 'product5'];
$inStockProducts = array_intersect($availableProducts, $selectedProducts);
print_r($inStockProducts); // Array ( [1] => product2 [3] => product4 )
위 예시에서는 재고에 있는 상품과 선택된 상품 간의 공통된 값을 찾아냅니다. 이를 통해 재고에 있는 상품만 선택할 수 있습니다.
array_intersect() 함수를 활용하면 다양한 상황에서 배열 간의 공통된 값들을 효과적으로 관리하고 활용할 수 있습니다.
같이 보기
- PHP array_intersect_assoc() 함수 - 키와 값을 기준으로 다른 배열과의 공통 요소 찾기
- PHP array_diff() 함수 - 다른 배열에 없는 값 찾기
- PHP array_diff_assoc() 함수 - 키를 기준으로 다른 배열에 없는 값 찾기
- PHP in_array() 함수 - 배열에 특정 값이 있는지 확인
- PHP foreach() 반복문 사용법 및 활용 예제
- PHP array_map() 함수 – 개념 정리 및 사용 예제
- PHP array_filter() 함수 - 개념 정리 및 사용 예제
- PHP array_search() 함수 - 개념 정리 및 사용 예제
- PHP array_values() 함수 - 배열 값 목록 가져오기