Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP array_udiff_uassoc() 함수 완벽 가이드 – 키와 값을 동시에 비교하는 방법

PHP의 array_udiff_uassoc() 함수는 사용자가 직접 정의한 콜백 함수를 이용해 배열의 키(key)값(value)을 모두 비교하고, 그 결과를 배열로 반환합니다. 구체적으로는 첫 번째 배열에는 존재하지만 다른 배열들에는 없는 모든 값을 담은 배열을 돌려줍니다.

이 함수는 일반적인 array_diff() 계열 함수와 달리, 키 비교와 값 비교 각각에 대해 별도의 콜백 함수를 지정할 수 있다는 점이 특징입니다. 따라서 대소문자 구분, 다국어 문자열 처리 등 특수한 비교 규칙이 필요할 때 유용하게 활용됩니다.

문법(Syntax)

array_udiff_uassoc(arr1, arr2, arr3, …, compare_func1, compare_func2)

매개변수(Parameters)

  • arr1 − 비교의 기준이 되는 첫 번째 배열입니다.

  • arr2 − 첫 번째 배열과 비교할 두 번째 배열입니다.

  • arr3 − 필요에 따라 추가로 비교할 수 있는 더 많은 배열들입니다.

  • compare_func1 − 배열의 를 비교하는 콜백 함수입니다. 첫 번째 인수가 두 번째 인수보다 작으면 0보다 작은 정수, 같으면 0, 크면 0보다 큰 정수를 반환해야 합니다.

  • compare_func2 − 배열의 을 비교하는 콜백 함수입니다. 역시 첫 번째 인수와 두 번째 인수를 비교하여 음수, 0, 양수 중 하나를 반환하도록 작성해야 합니다.

반환값(Return)

array_udiff_uassoc() 함수는 첫 번째 배열의 값 중에서, 나머지 어떤 배열에도 존재하지 않는 모든 값을 포함하는 배열을 반환합니다. 키와 값이 하나라도 다르면 해당 요소는 차집합 결과에 포함됩니다.

예제(Example)

아래 예제는 키 비교용 콜백 함수와 값 비교용 콜백 함수를 각각 정의한 뒤, 두 배열을 비교하는 코드입니다.

<?php
function compare_func_key($a, $b) {
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}
function compare_func_val($a, $b) {
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}
$arr1 = array("a" => "laptop", "b" => "keyboard", "c" => "mouse");
$arr2 = array("a" => "laptop", "b" => "keyboard", "c" => "headphone");
$res = array_udiff_uassoc($arr1, $arr2, "compare_func_key", "compare_func_val");
print_r($res);
?>

실행 결과(Output)

Array (
    [c] => mouse
)

결과 해설

두 배열에서 키 "a""b"는 키와 값이 모두 동일하기 때문에 결과에서 제외됩니다. 반면 키 "c"는 키 자체는 같지만, 첫 번째 배열의 값은 "mouse", 두 번째 배열의 값은 "headphone"으로 서로 다릅니다. 따라서 값 비교 콜백 함수가 두 값을 다르다고 판단하여 [c] => mouse 요소만 차집합 결과에 포함된 것입니다.

정리

array_udiff_uassoc()는 키와 값 모두에 대해 사용자 정의 비교 로직이 필요한 경우에 적합한 함수입니다. 키만 콜백으로 비교하고 싶다면 array_diff_uassoc(), 값만 비교하고 싶다면 array_udiff()를 사용하는 것이 좋습니다. 상황에 맞는 함수를 선택하면 배열 차집합 연산을 훨씬 유연하게 처리할 수 있습니다.