현재 위치: > 최신 기사 목록> 다차원 배열을 차별적으로 비교하기 위해 array_diff_assoc ()를 사용하는 것이 가능합니까?

다차원 배열을 차별적으로 비교하기 위해 array_diff_assoc ()를 사용하는 것이 가능합니까?

M66 2025-06-07

PHP에서 array_diff_assoc () 함수는 두 개 이상의 배열의 차이, 다른 배열에 있지 않은 첫 번째 배열의 리턴 요소의 차이를 비교하고 키 이름과 값을 비교하는 데 사용됩니다. 이것은 매우 편리한 기능이며, 특히 1 차원 어레이의 비교에 적합합니다.

그러나 다차원 배열에 적용하면 상황이 조금 더 복잡해집니다. 이 기사는 다차원 배열로 Array_diff_assoc () 의 적용을 탐색하고 복잡한 상황을 처리하는 방법에 대한 제안을 제공합니다.

array_diff_assoc () 함수 개요

Array_Diff_Assoc () 함수는 두 배열의 키 이름과 키 값을 비교하는 데 사용됩니다. 키 이름과 값이 첫 번째 배열에 존재하지만 다른 배열에는 존재하지 않거나 존재하지만 다른 경우 요소가 반환됩니다.

문법:

 array_diff_assoc(array $array1, array $array2, array ...$arrays): array
  • Array1 : 첫 번째 배열.

  • Array2 : 여러 배열을 비교할 수있는 두 번째 배열.

  • 차이가 포함 된 배열을 반환합니다.

예 : 1 차원 배열 비교

 $array1 = [
    "a" => "apple",
    "b" => "banana",
    "c" => "cherry"
];
$array2 = [
    "a" => "apple",
    "b" => "blueberry",
    "d" => "date"
];

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

산출:

 Array
(
    [b] => banana
    [c] => cherry
)

다차원 배열의 도전

Array_Diff_Assoc ()를 사용하여 다차원 배열을 비교할 때이 기능은 최상위 배열의 키와 값 만 비교하고 다차원 배열의 내용을 깊이 비교할 수 없기 때문에 문제가 더욱 복잡해집니다.

예 : 다차원 배열 비교

두 가지 다차원 배열이 있고 차이점을 비교하고 싶다고 가정합니다.

 $array1 = [
    "fruit" => [
        "apple" => 3,
        "banana" => 2,
    ],
    "vegetable" => [
        "carrot" => 5,
        "cucumber" => 7
    ]
];

$array2 = [
    "fruit" => [
        "apple" => 3,
        "banana" => 3,
    ],
    "vegetable" => [
        "carrot" => 5,
        "cucumber" => 8
    ]
];

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

산출:

 Array
(
    [fruit] => Array
        (
            [banana] => 2
        )

    [vegetable] => Array
        (
            [cucumber] => 7
        )
)

위에서 볼 수 있듯이 Array_diff_assoc ()는 배열의 최상위 구조 만 비교할 수 있으며 다차원 배열에서 중첩 요소를 깊이 비교할 수 없습니다.

다차원 배열에서 복잡한 상황을 처리하는 방법은 무엇입니까?

다차원 배열의 경우 각 요소의 차이를 재귀 적으로 비교하기 위해 비교 함수를 사용자 정의해야합니다. Array_diff_assoc ()를 재귀 적으로 또는 다른 기능과 함께 호출하여 복잡한 상황을 처리 할 수 ​​있습니다.

솔루션 : 다차원 배열을 재귀 적으로 비교합니다

다차원 배열의 비교를 수동으로 처리하는 재귀 함수를 작성할 수 있습니다. 다음은 다차원 배열의 차이를 다루는 예입니다.

 function array_diff_assoc_recursive($array1, $array2) {
    $diff = [];

    foreach ($array1 as $key => $value) {
        // 요소가 배열 인 경우,그런 다음 재귀 적으로 전화하십시오
        if (is_array($value)) {
            $diff[$key] = array_diff_assoc_recursive($value, $array2[$key] ?? []);
        } else {
            // 값이 다른 경우,그런 다음 차이 배열에 추가하십시오
            if (!isset($array2[$key]) || $array2[$key] !== $value) {
                $diff[$key] = $value;
            }
        }
    }

    return $diff;
}

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

산출:

 Array
(
    [fruit] => Array
        (
            [banana] => 2
        )

    [vegetable] => Array
        (
            [cucumber] => 7
        )
)

이 접근법을 통해 다차원 배열의 주요 값을 재귀 적으로 비교하고 정확한 차이를 얻을 수 있습니다.

요약

Array_Diff_Assoc () 는 매우 유용한 기능이지만 다차원 배열을 처리 할 때 특정 제한 사항이 있습니다. 다차원 배열의 차이를 비교하려면 재귀를 통해보다 정확한 비교를 달성해야합니다. 복잡한 응용 시나리오에서는 사용자 정의 재귀 비교 기능을 작성하는 것이 다차원 배열의 차이를 다루는 가장 좋은 방법입니다.