array_diff_assoc()
함수의 사용법
array_diff_assoc()
함수는
두 개 이상의 배열들의 키를 기준으로 값의 차이(difference)를 비교하여,
다른 배열에는 없고 첫 번째 배열에만 있는 키와 값으로 구성된 연관(associative) 배열을 반환하는 함수입니다.
이 함수는 연관 배열에서 키를 기준으로 다른 배열에 없는 값을 찾는데 사용되며,
이 특성을 활용하여 연관 배열에서 특정 요소을 제거하는 데에도 활용됩니다.
주로 다음과 같은 용도로 사용됩니다.
- 연관 배열들의 중복된 요소를 제거하기
- 연관 배열 간의 차이 확인
- 특정 요소를 연관 배열에서 제거
/* 연관 배열들의 중복된 요소를 제거하기 */
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 2, 'c' => 3, 'd' => 4];
$result = array_diff_assoc($array1, $array2);
print_r($result); // Array ( [a] => 1 )
/* 연관 배열 간의 차이 확인 */
$current_user_info = ['id' => 1, 'name' => 'John', 'age' => 30];
$updated_user_info = ['id' => 1, 'name' => 'John', 'age' => 31];
$differences = array_diff_assoc($updated_user_info, $current_user_info);
if (!empty($differences)) {
echo '변경된 데이터가 있습니다. 변경된 정보: ';
foreach ($differences as $key => $value) {
echo "$key: $value ";
}
} else {
echo '변경된 데이터가 없습니다.';
}
// 출력: '변경된 데이터가 있습니다. 변경된 정보: age: 31'
/* 연관 배열에서 특정 값 제거하기 */
$original_array = ['id' => 1, 'name' => 'John', 'age' => 30];
$value_to_remove = 'John';
$result = array_diff_assoc($original_array, ['name' => $value_to_remove]);
print_r($result); // Array ( [id] => 1 [age] => 30 )
array_diff_assoc()
함수는 키를 기준으로 다른 배열에 없는 값을 찾는데 사용하지만
array_diff()
함수는 키와는 무관하게 값만을 비교하여 다른 배열에 없는 값을 찾는데 사용합니다.
함수 | 차이점 |
---|---|
array_diff_assoc() |
배열의 키와 값을 모두 비교합니다. |
array_diff() |
배열의 키를 고려하지 않고 값만 비교합니다. |
array_diff_assoc()
함수의 형식은 다음과 같습니다.
구문
array_diff_assoc(array $array_1, array_2, $array_3, ...): array
매개변수
$array_1 |
필수. 비교 대상으로 하는 배열입니다. |
---|---|
$array_2 |
필수(PHP 8.0.0 버전부터는 옵션). 첫 번째 배열을 비교 대상으로 하는 배열입니다.
PHP 8.0.0 버전부터의 변경 사항을 참조하세요. |
$array_3, ... |
옵션. 첫 번째 배열을 비교 대상으로 하는 배열에 비교 대상을 더 추가한 배열로 여러 배열을 추가할 수 있습니다. |
반환 값
두 개 이상의 배열들의 키를 기준으로 값의 차이를 비교하여 다른 배열에는 없고 비교 대상이 되는 첫 번째 배열에만 있는 키와 값으로 구성된 연관 배열을 반환합니다.
만약에 키를 기준으로 비교하는 다른 배열과 첫 번째 배열에만 있는 값이 없을 경우에는 빈 배열을 반환합니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 1, 'b' => 2, 'c' => 3];
$result = array_diff_assoc($array1, $array2);
print_r($result); // Array ( )
PHP 8.0.0 버전부터의 변경 사항
PHP 8.0.0부터는 array_diff_assoc()
함수를 단 하나의 매개변수만 사용하여 호출할 수 있게 되었습니다.
이전에는 최소 두 개의 매개변수가 필요했습니다.
- PHP 8.0.0 버전 이전에는 항상 적어도 두 개의 배열을 매개변수로 전달해야 합니다.
- PHP 8.0.0 버전부터는 단 하나의 배열만 전달할 수도 있음을 의미합니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'b' => 2];
$unique = array_diff_assoc($array1);
print_r($unique);
/* 출력:
Array
(
[a] => 1
[b] => 2
[c] => 3
)
*/
array_diff_assoc()
함수에서 배열의 키(key)는 유일해야 하기 때문에 중복된 키는 허용되지 않습니다. 따라서 여러 키가 동일한 값을 가진 경우, 마지막으로 선언된 키가 이전에 선언된 동일한 키를 덮어씁니다.
이러한 이유로 $array1
의 정의에서 'b' => 2
가 두 번 나타나는데, 최종적으로는 마지막 'b' => 2
가 사용되고 이전 것은 덮어씌워집니다. 그래서 array_diff_assoc()
함수를 사용하면 중복된 키를 제거하고 마지막으로 선언된 값을 유지합니다. 결과적으로는 중복된 키가 제거된 배열이 출력됩니다.
하나의 배열 내부의 중복 값을 제거하거나 유일한 값을 추출하려면 array_unique()
함수를 사용하여 다음과 같이 할 수 있습니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'b' => 2];
$unique = array_unique($array1);
print_r($unique);
/* 출력:
Array (
[a] => 1
[b] => 2
[c] => 3
)
*/
주의할 점 - 배열 값에서 데이터 형식을 고려하지 않음
array_diff_assoc()
함수는 값만을 비교하며 데이터 형식을 고려하지 않습니다. 예시 코드를 통해 설명하겠습니다.
$array1 = ['a' => 1, 'b' => 2, 'c' => '3']; // '3'은 문자열로 저장
$array2 = ['a' => 1, 'b' => 2, 'c' => 3]; // 3은 정수로 저장
$differences = array_diff_assoc($array1, $array2);
print_r($differences) // Array ( )
위의 코드에서 $array1
과 $array2
는 값 '3'을 포함하고 있지만, 데이터 형식이 서로 다릅니다. array_diff_assoc()
함수는 키와 값을 비교할 때 값의 데이터 형식을 고려하지 않습니다. 따라서 데이터 형식이 다르더라도 차이를 감지하지 않고, 이 경우에는 빈 배열이 반환됩니다.
활용 예제
array_diff_assoc()
함수는 실전에서 다양한 상황에서 활용될 수 있습니다. 아래는 몇 가지 실전적인 예시들입니다.
권한 체크
$current_permissions = ['read' => true, 'write' => true, 'execute' => false];
$required_permissions = ['read' => true, 'write' => true, 'execute' => true];
$missing_permissions = array_diff_assoc($required_permissions, $current_permissions);
if (!empty($missing_permissions)) {
echo '사용자는 다음 권한이 부족합니다: ' . implode(', ', array_keys($missing_permissions));
} else {
echo '권한이 충분합니다.';
}
// 출력: '사용자는 다음 권한이 부족합니다: execute'
위 예제에서는 사용자의 권한과 필요한 권한을 비교하여 부족한 권한을 확인합니다.
선택된 옵션 제외하기
$all_options = ['apple' => 1, 'banana' => 2, 'cherry' => 3, 'date' => 4];
$selected_options = ['banana' => 2, 'date' => 4];
$remaining_options = array_diff_assoc($all_options, $selected_options);
echo '선택하지 않은 옵션: ' . implode(', ', array_keys($remaining_options));
// 출력: '선택하지 않은 옵션: apple, cherry'
사용자가 선택한 옵션을 기준으로 모든 옵션 중에서 선택하지 않은 옵션을 찾아냅니다.
버전 관리 시스템에서 변경된 파일 찾기
$committed_files = [
'file1.txt' => 'hash1',
'file2.txt' => 'hash2',
'file3.txt' => 'hash3'
];
$modified_files = [
'file1.txt' => 'hash1',
'file3.txt' => 'hash3',
'file4.txt' => 'hash4'
];
$new_files = array_diff_assoc($modified_files, $committed_files);
if (!empty($new_files)) {
echo '변경된 파일 목록: ' . implode(', ', array_keys($new_files));
} else {
echo '변경된 파일이 없습니다.';
}
// 출력: '변경된 파일 목록: file4.txt'
버전 관리 시스템에서 변경된 파일 목록과 커밋된 파일 목록을 비교하여 새로운 파일을 찾습니다.
이러한 예시들은 array_diff_assoc()
함수를 통해 다양한 상황에서 연간 배열 간의 차이를 찾고, 원하는 조작을 할 수 있음을 보여줍니다. 함수를 적절히 활용하여 간편하게 연관 배열을 처리할 수 있습니다.
같이 보기
- PHP array_diff() 함수 - 다른 배열에 없는 값 찾기
- PHP array_intersect() 함수 - 다른 배열과의 공통 값 찾기
- PHP array_intersect_assoc() 함수 - 키와 값을 기준으로 다른 배열과의 공통 요소 찾기
- PHP in_array() 함수 - 배열에 특정 값이 있는지 확인
- PHP foreach() 반복문 사용법 및 활용 예제
- PHP array_map() 함수 – 개념 정리 및 사용 예제
- PHP array_filter() 함수 - 개념 정리 및 사용 예제
- PHP array_search() 함수 - 개념 정리 및 사용 예제
- PHP array_values() 함수 - 배열 값 목록 가져오기