정의 및 사용 방법
- PHP 버전
- 4.3+
array_intersect_assoc() 함수는
키(Key)와 값(Value) 쌍을 기준으로 배열 간의 공통 여부(intersection)를 비교하여,
다른 배열과 공통으로 존재하는 첫 번째 배열의 요소로 구성된 연관(associative) 배열을 반환합니다.
이 함수는 연관 배열에서 키(Key)와 값(Value) 쌍이 동시에 일치하는지를 기준으로, 다른 배열과 공통으로 존재하는 요소를 찾는 데 사용됩니다. 즉, 키와 값이 모두 같아야 공통 요소로 간주됩니다.
이 특성을 활용하면, 특정 키와 값의 조합을 기준으로
여러 연관 배열에서 공통으로 유지해야 할 요소를 식별하는 데 사용할 수 있습니다.
주로 다음과 같은 용도로 사용됩니다.
- 다른 배열과 키(Key)와 값(Value) 쌍이 모두 동일한 공통 요소를 찾기
- 연관 배열 간의 공통 요소(intersection)를 확인하기
- 특정 키와 값 쌍을 기준으로 연관 배열에서 공통 요소만 추출하기
기본 예제
/* 다른 배열과 키(Key)와 값(Value) 쌍이 모두 동일한 공통 요소 찾기 */
$array1 = ['a' => 1, 'b' => 2, 'c' => 3]; // 비교 기준이 되는 배열
$array2 = ['b' => 2, 'c' => 3, 'd' => 4];
$result = array_intersect_assoc($array1, $array2);
print_r($result); // Array ( [b] => 2 [c] => 3 )
/* 연관 배열 간의 공통 요소(intersection) 확인 */
$current_user_info = ['id' => 1, 'name' => 'John', 'age' => 30];
$updated_user_info = ['id' => 1, 'name' => 'John', 'age' => 31];
$common = array_intersect_assoc($updated_user_info, $current_user_info);
if (!empty($common)) {
echo '공통으로 유지되는 데이터가 있습니다: ';
foreach ($common as $key => $value) {
echo "$key: $value ";
}
} else {
echo '공통 데이터가 없습니다.';
}
// 출력: '공통으로 유지되는 데이터가 있습니다: id: 1 name: John'
/* 특정 키와 값 쌍을 기준으로 연관 배열에서 공통 요소만 추출하기 */
$original_array = ['id' => 1, 'name' => 'John', 'age' => 30];
$criteria = ['name' => 'John'];
$result = array_intersect_assoc($original_array, $criteria);
print_r($result); // Array ( [name] => John )
array_intersect_assoc() 함수는
키(Key)와 값(Value) 쌍이 동시에 일치하는지를 기준으로,
다른 배열과 공통으로 존재하는 요소를 찾는 데 사용합니다.
반면, array_intersect() 함수는 키(Key)는 고려하지 않고 값(Value)만을 비교하여, 다른 배열과 공통으로 존재하는 값을 찾는 데 사용합니다.
| 함수 | 차이점 |
|---|---|
array_intersect_assoc() |
배열의 키와 값을 모두 비교합니다. |
array_intersect() |
배열의 키를 고려하지 않고 값만 비교합니다. |
구문
array_intersect_assoc(array $array_1, $array_2, $array_3, ...): array
매개변수
$array_1 |
필수. 비교 기준이 되는 배열입니다. |
|---|---|
$array_2 |
필수(PHP 8.0.0 버전부터는 옵션). 첫 번째 배열을 비교 대상으로 하는 배열입니다.
PHP 8.0.0 버전부터의 변경 사항을 참조하세요. |
$array_3, ... |
옵션. 첫 번째 배열을 비교 대상으로 하는 배열에 비교 대상을 더 추가한 배열로 여러 배열을 추가할 수 있습니다. |
반환 값
두 개 이상의 배열에서 키(Key)와 값(Value) 쌍이 동시에 일치하는지를 기준으로 공통 여부를 비교하여, 다른 배열과 공통으로 존재하는 첫 번째 배열의 키와 값 쌍으로 구성된 새로운 연관 배열을 반환합니다.
만약 키(Key)와 값(Value) 쌍을 기준으로 비교했을 때, 첫 번째 배열과 공통으로 존재하는 요소가 없다면 빈 배열을 반환합니다.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 3, "c" => 4, "d" => 5];
$common_elements = array_intersect_assoc($array1, $array2);
print_r($common_elements); // Array ( )
PHP 8.0.0 버전부터의 변경 사항
PHP 8.0.0부터는 array_intersect_assoc() 함수를 단 하나의 매개변수만 사용하여 호출할 수 있게 되었습니다.
이전에는 최소 두 개의 매개변수가 필요했습니다.
- PHP 8.0.0 버전 이전에는 항상 적어도 두 개의 배열을 매개변수로 전달해야 합니다.
- PHP 8.0.0 버전부터는 단 하나의 배열만 전달할 수도 있음을 의미합니다.
$array = ["a" => 1, "b" => 2, "c" => 3];
$result = array_intersect_assoc($array);
print_r($result);
/* Output:
Array
(
[a] => 1
[b] => 2
[c] => 3
)
*/
주의할 점
array_intersect_assoc() 함수는 키(Key)와 값(Value) 쌍을 기준으로 다른 배열과 공통(intersection)으로 존재하는 요소를 찾는 데 사용됩니다.
데이터 형식이 다르지만 문자열 표현이 같은 경우
키(Key)는 PHP 배열 규칙에 따라 동일성만 비교되며, 값(Value)은 느슨한 비교(loose comparison) 방식으로 비교되어 데이터 형식의 차이를 구분하지 않습니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => '3']; // '3'은 문자열로 저장
$array2 = ['a' => 1, 'b' => 2, 'c' => 3]; // 3은 정수로 저장
$intersect = array_intersect_assoc($array1, $array2);
print_r($intersect);
/* 출력:
Array
(
[a] => 1
[b] => 2
[c] => 3
)
*/
위의 코드에서 $array1과 $array2는
값 '3'과 3을 포함하고 있지만,
느슨한 비교(loose comparison)에서는 두 값이 동일하다고 판단됩니다.
따라서 array_intersect_assoc() 함수는 이 데이터 형식의 차이를 구분하지 않으며,
해당 요소를 공통 요소로 간주하여 결과 배열에 포함합니다.
문자열 표현은 동일해아 함
데이터 형식이 다르더라도 문자열 표현이 같은 경우에는 동일하게 처리하지만, array_intersect_assoc() 함수는 두 값을 비교할 때 각 요소를 먼저 문자열(string)로 변환한 뒤, 문자열 기준 비교(string comparison)를 수행합니다. 즉, 서로 다른 데이터 타입이라도 문자열로 변환했을 때 그 형태가 같아야 '일치'하는 것으로 간주합니다.
$array1 = array(0, 1, 2); // 정수 0, 1, 2
$array2 = array('00', '01', '2'); // 문자열 '00', '01', '2'
$result = array_intersect_assoc($array1, $array2);
print_r($result);
/* 출력:
Array
(
[2] => 2
)
*/
0과 1은 문자열로 변환해도 각각 '0', '1'이 되어 '00', '01'과는 다르기 때문에 차이점으로 식별되지만, 정수 2는 문자열 '2'는 공통점으로 식별됩니다.
활용 예제
주로 다음과 같은 용도로 활용됩니다.
- 데이터 검색 및 필터링
- 데이터 일치 여부 확인
- 연관된 데이터 처리
데이터 검색 및 필터링
여러 데이터 배열이 있을 때 특정 키와 값이 공통으로 존재하는 요소를 찾아내어 데이터를 검색하거나 필터링할 수 있습니다.
다음은 상품 정보를 담고 있는 배열들이 있고, 사용자가 선택한 필터 조건이 주어진다고 가정해봅시다. 사용자가 선택한 필터에 해당하는 상품들을 찾아내는 예제입니다.
$products = [
['id' => 1, 'name' => 'Laptop', 'brand' => 'Dell', 'price' => 1200],
['id' => 2, 'name' => 'Smartphone', 'brand' => 'Samsung', 'price' => 800],
['id' => 3, 'name' => 'Tablet', 'brand' => 'Apple', 'price' => 600],
['id' => 4, 'name' => 'Smartwatch', 'brand' => 'Fitbit', 'price' => 150],
];
// 사용자가 선택한 필터 조건
$filter_criteria = ['brand' => 'Samsung', 'price' => 800];
// 사용자가 선택한 조건과 일치하는 상품 찾기
$filtered_products = [];
foreach ($products as $product) {
if (count(array_intersect_assoc($product, $filter_criteria)) === count($filter_criteria)) {
$filtered_products[] = $product;
}
}
// 결과 출력
print_r($filtered_products);
/*
Array
(
[0] => Array
(
[id] => 2
[name] => Smartphone
[brand] => Samsung
[price] => 800
)
)
*/
코드 부연설명
count() 함수는 주어진 배열의 모든 요소의 개수를 계산해서(count) 정수로 반환합니다.
이 결과에서 보듯이, 사용자가 선택한 필터 조건에 해당하는 상품이 배열로 출력되었습니다. 선택한 브랜드가 'Samsung'이고 가격이 800인 상품이 존재하기 때문에 이 상품이 결과 배열에 포함되었습니다.
데이터 일치 여부 확인
두 개 이상의 배열에서 특정 키와 값이 동시에 일치하는지 확인할 때 사용될 수 있습니다.
다음은 두 개의 배열에서 동일한 키와 값이 있는지 확인하는 예제입니다.
// 두 사용자의 정보
$user_1 = [
'id' => 1,
'username' => 'john_doe',
'email' => 'john@example.com',
'age' => 30,
];
$user_2 = [
'id' => 2,
'username' => 'jane_smith',
'email' => 'jane@example.com',
'age' => 28,
];
// 두 사용자의 정보에서 동일한 키와 값이 있는지 확인하는 함수
function has_matching_info($user_1, $user_2) {
$matching_info = array_intersect_assoc($user_1, $user_2);
// 동일한 키와 값이 있는 경우 반환
return !empty($matching_info);
}
// 결과 출력
if (has_matching_info($user_1, $user_2)) {
echo '두 사용자의 정보에서 일치하는 내용이 있습니다.';
} else {
echo '두 사용자의 정보에서 일치하는 내용이 없습니다.';
}
// 출력: '두 사용자의 정보에서 일치하는 내용이 없습니다.'
이 코드에서는 두 사용자의 정보를 배열로 표현하고, has_matching_info 함수를 사용하여 두 배열 간에 동일한 키와 값이 있는지 확인합니다. 그리고 그 결과에 따라 메시지를 출력합니다.
연관된 데이터 처리
여러 데이터 배열에서 특정 연관된 키와 값이 동시에 존재하는 경우, 이를 기반으로 데이터를 처리하거나 조작할 수 있습니다.
다음은 사용자들의 주문 데이터가 있는 상황에서, 두 사용자의 주문 중에서 동일한 제품을 주문한 경우를 확인하는 코드 예제입니다.
// 사용자 1의 프로그래밍 언어 선호도
$user1_languages = [
'Python' => 4,
'JavaScript' => 5,
'Java' => 3,
];
// 사용자 2의 프로그래밍 언어 선호도
$user2_languages = [
'JavaScript' => 5,
'Java' => 4,
'PHP' => 2,
];
// 두 사용자의 프로그래밍 언어 선호도 중에서 동일한 언어를 찾는 함수
function find_matching_languages($languages1, $languages2) {
$matching_languages = array_intersect_assoc($languages1, $languages2);
return $matching_languages;
}
// 결과 출력
$matching_languages = find_matching_languages($user1_languages, $user2_languages);
if (!empty($matching_languages)) {
echo '두 사용자가 동일한 프로그래밍 언어를 선호합니다. ('
. implode(', ', array_keys($matching_languages)) . ')';
} else {
echo '두 사용자가 동일한 프로그래밍 언어를 선호하지 않습니다.';
}
// 출력: 두 사용자가 동일한 프로그래밍 언어를 선호합니다. (JavaScript)
코드 부연설명
implode() 함수는 배열의 요소들을 순서대로 구분자로 합쳐서 생성한 문자열을 반환합니다.
코드 부연설명
array_keys() 함수는 주어진 배열에서 키(keys)만 추출하여 새로운 배열로 반환합니다.
이 코드에서는 find_matching_products 함수를 사용하여 두 사용자의 주문 중에서 동일한 제품을 찾습니다. 결과에 따라 사용자가 동일한 제품을 주문했는지 여부를 출력합니다. 이 코드는 간단한 주문 데이터를 활용하여 두 사용자 간에 어떤 제품을 공통으로 주문했는지 확인하는 예시입니다.
같이 보기
- PHP array_intersect() 함수 - 다른 배열과의 공통 값 찾기
- PHP array_diff() 함수 - 다른 배열에 없는 값 찾기
- PHP array_diff_assoc() 함수 - 키를 기준으로 다른 배열에 없는 값 찾기
- PHP in_array() 함수 - 배열에 특정 값이 있는지 확인
- PHP foreach() 반복문 사용법 및 활용 예제
- PHP array_map() 함수 – 개념 정리 및 사용 예제
- PHP array_filter() 함수 - 개념 정리 및 사용 예제
- PHP array_search() 함수 - 개념 정리 및 사용 예제
- PHP array_values() 함수 - 배열 값 목록 가져오기