현재 위치: > 최신 기사 목록> array_diff_assoc ()에 사용자 정의 비교 함수를 사용할 수 있습니까? (아니요, 대안을 자세히 설명하십시오)

array_diff_assoc ()에 사용자 정의 비교 함수를 사용할 수 있습니까? (아니요, 대안을 자세히 설명하십시오)

M66 2025-06-06

Array_Diff_Assoc () 는 PHP의 내장 비교 메커니즘을 기반으로하여 두 배열이 동일한 지 여부를 결정합니다. 표준 PHP 비교 연산자 ( == )를 사용합니다. 이 기능은 사용자 정의 비교 함수로 전달할 매개 변수를 제공하지 않으므로 비교 방식을 직접 변경할 수 없습니다.

구체적으로, array_diff_assoc () 함수의 구현은 콜백 함수 (예 : usort () , array_map () 및 기타 함수를 지원하여 수신 사용자 지정 기능을 지원하도록 설계되지 않았습니다. 이를 통해 특정 규칙 별 배열 값 비교 또는 배열을 비교할 때 특정 규칙을 사용하는 등 Array_Diff_Assoc () 에서 사용자 정의 비교 로직을 사용자 정의 할 수 없습니다.

PHP의 두 어레이를 비교하는 표준 방법

기본적으로 Array_Diff_Assoc ()는 배열의 키와 값을 기반으로 표준 비교를합니다. 두 배열의 키가 동일하지만 값이 동일하지 않은 경우 array_diff_assoc ()는 차이 부분을 반환합니다. 예를 들어:

 $array1 = [
    "a" => "apple",
    "b" => "banana",
    "c" => "cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "berry",
    "c" => "cherry"
];

$result = array_diff_assoc($array1, $array2);
print_r($result);

산출:

 Array
(
    [b] => banana
)

이 예에서 Array_Diff_Assoc ()는 두 배열의 차이를 찾습니다. 키 "B" 가있는 값은 두 배열에서 다르므로 차이를 반환합니다.

그러나 특정 사용자 지정 규칙 (예 : 어떤 방식으로 문자열 비교, 케이스를 무시하고, 특정 문자를 무시하는 등)를 따르려면 Array_diff_assoc ()는 필요를 충족시키지 못합니다.

대안 : 사용자 정의 비교 기능 구현

Array_Diff_Assoc () 자체는 사용자 정의 비교 함수를 지원하지 않지만 다른 방법을 통해 사용자 정의 비교 로직을 구현할 수 있습니다. 일반적인 솔루션은 Array_Filter () 와 사용자 정의 비교 함수를 통해 차이 비교를 수동으로 구현하는 것입니다.

다음은 array_diff_assoc ()을 사용자 정의 비교 함수로 바꾸는 예입니다.

 function custom_compare($value1, $value2) {
    // 예를 들어,비교 사례를 무시하십시오
    return strcasecmp($value1, $value2) !== 0;
}

function custom_array_diff_assoc($array1, $array2) {
    $result = [];

    foreach ($array1 as $key => $value1) {
        if (!array_key_exists($key, $array2) || custom_compare($value1, $array2[$key])) {
            $result[$key] = $value1;
        }
    }

    return $result;
}

$array1 = [
    "a" => "Apple",
    "b" => "banana",
    "c" => "Cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "Banana",
    "c" => "Cherry"
];

$result = custom_array_diff_assoc($array1, $array2);
print_r($result);

산출:

 Array
(
    [a] => Apple
    [b] => banana
)

이 예에서는 Custom_Cocpare () 라는 사용자 정의 비교 함수를 정의하여 비교를 위해 문자열의 상류 및 하부 사례를 무시합니다. custom_array_diff_assoc () 에서 먼저 두 배열에 키가 존재하는지 확인합니다. 존재하는 경우 사용자 정의 비교 함수를 통해 값이 동일한 지 판단 할 수 있습니다. 값이 다르면 키 값 쌍이 결과 배열에 추가됩니다.

이 방법은 우리에게 더 많은 유연성을 제공하고 우리의 요구에 따라 비교 로직을 사용자 정의 할 수 있습니다.

다른 일반적인 대안

비교 로직을 수동으로 구현하는 것 외에도 Array_udiff_Assoc () 와 같은 다른 내장 함수를 사용할 수도 있습니다.이 기능은 사용자 정의 비교 함수를 사용하여 배열의 차이를 비교할 수 있습니다. array_udiff_assoc () 함수의 원리는 Array_diff_assoc () 와 유사하지만 비교를 위해 사용자 정의 콜백 함수를 수용합니다.

샘플 코드 :

 function custom_compare($value1, $value2) {
    return strcasecmp($value1, $value2);
}

$array1 = [
    "a" => "Apple",
    "b" => "banana",
    "c" => "Cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "Banana",
    "c" => "Cherry"
];

$result = array_udiff_assoc($array1, $array2, 'custom_compare');
print_r($result);

산출:

 Array
(
    [a] => Apple
    [b] => banana
)

이 예에서 array_udiff_assoc () 함수는 Custom_Copare ()를 사용하여 두 배열의 차이를 비교하여보다 유연한 비교 동작을 허용합니다.