현재 위치: > 최신 기사 목록> array_diff_key () 연관 배열에서 중첩 어레이와의 관계

array_diff_key () 연관 배열에서 중첩 어레이와의 관계

M66 2025-05-15

php에서 array_diff_key ()는 둘 이상의 배열을 비교하는 함수입니다. 값이 아닌 배열의 키를 비교합니다. 이 함수는 첫 번째 배열에 포함되어 있지만 다른 배열에는 포함되지 않은 배열을 반환합니다.

array_diff_key () 의 동작을 이해하는 것은 중첩 어레이, 특히 복잡한 연관 배열을 처리 할 때 특히 중요합니다.

1. 기본 개념 : array_diff_key () 함수

array_diff_key () 함수의 기본 구문은 다음과 같습니다.

 array_diff_key(array $array1, array $array2, array ...$arrays): array
  • $ array1은 첫 번째 배열을 비교할 배열입니다.

  • $ array2, ... $ 배열은 첫 번째 배열과 비교할 다른 배열입니다.

  • 이 함수는 $ array1 에 존재하지만 다른 배열에는 존재하지 않는 키 값 쌍을 포함하는 새 배열을 반환합니다.

2. 프로세스 일반 어레이

보통 비 넥 어레이의 경우 array_diff_key ()는 예상대로 키를 비교합니다. 예를 들어:

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

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

출력은 다음과 같습니다.

 Array
(
    [a] => 1
    [c] => 3
)

Array_diff_key ()는 $ array2 에 포함되지 않은 $ array1 의 키를 반환합니다. 여기서 비교는 값이 아닌 키 이름에만 근거합니다.

3. 중첩 어레이를 처리합니다

중첩 어레이를 Array_Diff_Key () 로 전달하면 상황이 더욱 복잡해집니다. 중첩 어레이의 다음 예를 고려하십시오.

 $array1 = [
    'a' => ['name' => 'John', 'age' => 25],
    'b' => ['name' => 'Jane', 'age' => 30],
    'c' => ['name' => 'Tom', 'age' => 22]
];
$array2 = [
    'b' => ['name' => 'Jane', 'age' => 30],
    'd' => ['name' => 'Alex', 'age' => 28]
];

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

출력은 다음과 같습니다.

 Array
(
    [a] => Array
        (
            [name] => John
            [age] => 25
        )
    [c] => Array
        (
            [name] => Tom
            [age] => 22
        )
)

이 예에서 Array_Diff_Key ()는 외부 어레이 ( A , B , C )의 키를 비교하고 키가 다른 배열에 존재하는지 확인합니다. 키 B가 $ array2 에 나타나면 $ array1 에서 제외됩니다. 여기에서 내부 중첩 어레이 ( 'a'=> [ 'name'=> 'john', 'age'=> 25] )는 별도로 비교되지 않습니다. 우리는 키 AC가 예약되어 있다고 말할 수 있습니다.

4. 중첩 어레이와 깊은 레벨의 비교

array_diff_key ()가 중첩 어레이의 키를 재귀 적으로 비교하지는 않는다는 점은 주목할 가치가 있습니다. 더 깊은 배열 키를 원한다면 재귀 함수를 사용하거나 수동으로 처리해야합니다. 다음은 재귀의 예입니다.

 function array_diff_key_recursive($array1, $array2) {
    $result = array_diff_key($array1, $array2);
    
    foreach ($result as $key => $value) {
        if (is_array($value)) {
            $result[$key] = array_diff_key_recursive($value, $array2);
        }
    }
    
    return $result;
}

$array1 = [
    'a' => ['name' => 'John', 'age' => 25, 'address' => ['city' => 'New York', 'zip' => '10001']],
    'b' => ['name' => 'Jane', 'age' => 30],
    'c' => ['name' => 'Tom', 'age' => 22]
];
$array2 = [
    'b' => ['name' => 'Jane', 'age' => 30]
];

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

출력은 다음과 같습니다.

 Array
(
    [a] => Array
        (
            [name] => John
            [age] => 25
            [address] => Array
                (
                    [city] => New York
                    [zip] => 10001
                )
        )
    [c] => Array
        (
            [name] => Tom
            [age] => 22
        )
)

이 재귀 구현에서는 중첩 어레이의 재귀 배열 array_diff_key () 비교를 수행하여 내부 키를 올바르게 비교할 수 있습니다.

5. 요약

  • Array_Diff_Key () 는 주로 배열 값이 아닌 배열 키를 비교하는 데 사용됩니다.

  • 중첩 어레이의 경우 array_diff_key ()는 외부 키만 비교하고 내부 배열은 비교하지 않습니다.

  • 중첩 어레이의 키를 재귀 적으로 비교 해야하는 경우 사용자 정의 재귀 함수로이를 수행 할 수 있습니다.

실제 개발에서 array_diff_key () 의 동작을 이해하고 중첩 어레이에서의 응용 프로그램은 복잡한 데이터 구조를 처리하는 데 매우 중요합니다. 데이터를 유연하게 처리하고 추가 작업을위한 정확한 배열 구조를 제공하는 데 도움이됩니다.