array_intersect()
함수의 사용법
array_intersect()
함수는
비교 대상이 되는 배열과 한 개 이상의 다른 배열들의 공통(intersect, 교집합) 값을 찾아 배열로 반환하는 함수입니다.
이 함수는 배열들 간의 공통된 값을 비교할 때 활용되며, 주로 다음과 같은 용도로 사용됩니다.
- 두 개의 배열에서 공통으로 존재하는 값을 찾기
- 사용자가 입력한 값이 이미 존재하는지 확인하기
- 데이터베이스에서 중복된 값을 제거하기
/* 두 개의 배열에서 공통으로 존재하는 값을 찾기 */
$array1 = [1, 2, 3, 4, 5]; // 비교 대상이 되는 배열
$array2 = [2, 3, 4, 6, 7];
$uniqueValues = array_intersect($array1, $array2);
print_r($uniqueValues);
// 출력: Array ( [2] => 3 [3] => 4 ) => 반환된 배열의 키는 비교 대상이 되는 원래 배열에서의 키가 그대로 보존
/* 사용자가 입력한 값이 이미 존재하는지 확인하기 */
$value = $_POST['value'];
$result = array_intersect($array, [$value]);
if (count($result) > 0) {
// 값이 이미 존재합니다.
} else {
// 값이 존재하지 않습니다.
}
/* 데이터베이스에서 중복된 값을 제거하기 */
$sql = "SELECT * FROM `table`";
$result = $pdo->query($sql);
$array = [];
foreach ($result as $row) {
$array[] = $row['value'];
}
$unique_array = array_unique($array);
print_r($unique_array); // 중복된 값이 제거된 배열
알아두세요!
array_intersect()
함수로 반환된 배열의 키는 비교 대상이 되는 원래 배열에서의 키가 그대로 보존됩니다.
array_intersect()
함수의 형식은 다음과 같습니다.
구문
array_intersect(array $array_1, array_2, $array_3, ...): array
매개변수
$array_1 |
필수. 비교 대상으로 하는 배열입니다. |
---|---|
$array_2 |
필수(PHP 8.0.0 버전부터는 옵션). 첫 번째 배열을 비교 대상으로 하는 배열입니다.
PHP 8.0.0 버전부터의 변경 사항을 참조하세요. |
$array_3, ... |
옵션. 첫 번째 배열을 비교 대상으로 하는 배열에 비교 대상을 더 추가한 배열로 여러 배열을 추가할 수 있습니다. |
반환 값
비교 대상이 되는 배열과 한 개 이상의 다른 배열들의 공통 값을 찾아 배열로 반환합니다.
이때 반환된 배열의 키는 비교 대상이 되는 원래 배열에서의 키가 그대로 보존됩니다.
만약 비교하는 다른 배열과 비교 대상이 되는 첫 번째 배열에서 공통으로 존재하는 값이 없을 경우에는 빈 배열을 반환합니다.
$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() 함수 - 배열 값 목록 가져오기