현재 위치: > 최신 기사 목록> Array_Diff ()를 사용하여 다차원 배열의 깊이 비교를 구현하십시오 (재귀 적으로)

Array_Diff ()를 사용하여 다차원 배열의 깊이 비교를 구현하십시오 (재귀 적으로)

M66 2025-05-17

다차원 배열의 깊이 비교를 구현하기 위해 php의 array_diff () 함수를 사용하는 방법은 무엇입니까? 재귀 적으로 처리해야합니까?

php에서 array_diff ()는 둘 이상의 배열에서 다른 값을 반환하는 매우 일반적인 함수입니다. 다차원 배열을 비교할 때 array_diff ()는 배열의 1 차원 만 비교할 수 있습니다. 다차원 배열에 대한 깊은 비교를 수행 해야하는 경우 Array_Diff () 자체는이 작업을 완료하기에 충분하지 않습니다. 다차원 배열의 깊이 비교를 달성하려면 각 배열 요소 층을 레이어로 비교하기 위해 재귀를 사용해야합니다.

이 기사는 재귀와 함께 Array_Diff () 함수를 사용하여 다차원 배열의 깊은 비교를 구현하고 재귀가 필요한 이유를 설명하는 방법을 소개합니다.

array_diff ()의 기본 사용

먼저 Array_Diff () 의 기본 사용법을 이해해 봅시다. 이 함수는 첫 번째 배열에 표시되지만 후속 배열에는없는 모든 요소를 ​​포함하는 배열을 반환합니다. 기본 구문은 다음과 같습니다.

 array_diff(array $array1, array ...$arrays): array

예를 들어, 다음 코드는 두 개의 1 차원 배열을 array_diff () 와 비교하는 방법을 보여줍니다.

 $array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];

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

산출:

 Array
(
    [0] => 1
    [1] => 2
)

보시다시피, Array_Diff ()는 Array $ array1 에 존재하지만 $ array2 에 있지 않은 요소를 반환합니다.

다차원 배열의 깊이 비교

다차원 배열의 비교를 위해 Array_Diff ()는 1 차원 배열 만 비교하므로 기본적으로 직접 수행 할 수 없습니다. 배열 자체의 요소가 배열 인 경우 Array_diff ()는 재귀 적으로 비교하는 대신 배열의 참조를 직접 비교합니다.

다차원 배열의 깊은 비교를 얻으려면 배열 레이어의 각 요소를 레이어별로 비교하는 재귀 함수를 작성해야합니다. 다음은 다차원 어레이 깊이 비교의 재귀 구현의 예입니다.

 function array_diff_recursive($array1, $array2) {
    $result = [];
    
    // 첫 번째 배열을 반복하십시오
    foreach ($array1 as $key => $value) {
        if (is_array($value) && isset($array2[$key]) && is_array($array2[$key])) {
            // 값이 배열이고 두 번째 배열에 해당 배열도있는 경우,재귀 호출
            $recursive_diff = array_diff_recursive($value, $array2[$key]);
            if (!empty($recursive_diff)) {
                $result[$key] = $recursive_diff;
            }
        } else {
            // 값이 배열이 아닌 경우,직접 사용하십시오 array_diff 비교하십시오
            if (!in_array($value, $array2)) {
                $result[$key] = $value;
            }
        }
    }
    
    return $result;
}

$array1 = [
    'a' => 1,
    'b' => [2, 3, 4],
    'c' => 5
];

$array2 = [
    'a' => 1,
    'b' => [2, 3],
    'c' => 5
];

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

산출:

 Array
(
    [b] => Array
        (
            [2] => 4
        )
)

이 예에서는 Array_Diff_Recursive ()가 각 항목을 $ array1$ array2 로 재귀 적으로 확인합니다. 항목이 배열이고 두 배열에 해당 배열이있는 경우 서브 어레이를 계속 재귀 적으로 비교할 수 있습니다. 항목이 배열이 아닌 경우 비교를 위해 array_diff ()를 직접 사용합니다.

왜 재귀가 필요합니까?

다차원 배열에는 서브 어레이가 포함될 수 있고, 이러한 서브 어레이도 더 많은 서브 어레이 등을 포함 할 수 있기 때문에 재귀는 다차원 배열의 깊은 비교를 구현하는 핵심입니다. 재귀를 사용하면 각 배열 층이 올바르게 비교되도록합니다. 재귀를 사용하지 않으면 배열의 상단 레이어 만 비교할 수 있으며 각 레이어로 깊숙이 들어갈 수 없습니다.

결론적으로

PHP의 array_diff () 함수는 1 차원 배열의 비교에 매우 적합하지만 다차원 배열의 깊이 비교를 위해 재귀를 사용해야합니다. 재귀를 통해 각 배열 층의 요소를 하나씩 비교할 수 있습니다. 이 접근법은 다차원 배열, 특히 중첩 어레이를 처리 할 때 매우 효과적입니다.

보다 복잡한 배열 비교를 처리해야하거나 재귀 성능을 더욱 최적화 해야하는 경우 몇 가지 추가 최적화 측정을 고려해야 할 수도 있지만 기본 재귀 비교 방법은 대부분의 요구를 충족시킬 수 있습니다.

이 기사의 예제가 PHP를 사용하여 다차원 배열의 깊은 비교를 구현하는 방법을 이해하는 데 도움이되기를 바랍니다.