현재 위치: > 최신 기사 목록> Array_diff_key ()가 올바르게 작동하지 않는 이유는 무엇입니까? 일반적인 문제 및 솔루션 문제 해결

Array_diff_key ()가 올바르게 작동하지 않는 이유는 무엇입니까? 일반적인 문제 및 솔루션 문제 해결

M66 2025-05-15

Array_Diff_Key () 는 PHP의 함수로 두 개의 배열을 비교하고 키 이름이 다른 요소를 반환합니다. 그 기능은 단순 해 보이지만 실제로 사용하는 동안 때로는 제대로 작동하지 않습니다. 이 기사에서는 Array_Diff_Key () 의 관련 문제를 더 잘 해결하고 수정하는 데 도움이되는 몇 가지 일반적인 문제와 해당 솔루션을 소개합니다.

1. array_diff_key () 의 기본 사용

Array_Diff_Key ()를 사용할 때는 일반적으로 두 배열을 매개 변수로 비교하여 두 번째 배열에 있지 않은 첫 번째 배열에서 키 값 쌍을 반환합니다. 기본 구문은 다음과 같습니다.

 array_diff_key(array $array1, array $array2): array

예를 들어 다음과 같이 두 개의 배열이 있다고 가정합니다.

 $array1 = [
    'apple' => 1,
    'banana' => 2,
    'cherry' => 3
];

$array2 = [
    'banana' => 2,
    'date' => 4
];

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

현재 $ 결과 의 출력은 다음과 같습니다.

 Array
(
    [apple] => 1
    [cherry] => 3
)

이 예에서는 array_diff_key ()가 $ array1 의 중간 키 이름이 $ array2 에 나타나지 않는 항목을 반환합니다.

2. 자주 묻는 질문과 문제 해결

1. 키 이름 유형은 일관성이 없습니다

Array_Diff_Key () 는 CASE에 민감하며 유형은 키 이름을 비교할 때 결과에도 영향을 미칩니다. 가장 일반적인 상황은 키 이름의 유형 (문자열 또는 숫자)이 일치하지 않아 비교 결과가 잘못되었다는 것입니다. 예를 들어:

 $array1 = [
    1 => 'apple',
    '2' => 'banana'
];

$array2 = [
    '1' => 'apple',
    2 => 'banana'
];

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

위의 코드에서 Array_diff_key ()는 1'1'이 2'2' 와 마찬가지로 다른 키로 간주됩니다. 따라서 반환 된 결과는 당신을 혼동 할 수 있습니다.

해결 방법 : 비교 어레이의 키 이름 유형이 일관되어 있는지 확인하십시오. 이 문제는 키 이름 유형의 배열을 명시 적으로 변환하여 피할 수 있습니다. 예를 들어 모든 키 이름을 문자열 또는 숫자로 변환합니다.

 $array1 = array_map('strval', $array1);
$array2 = array_map('strval', $array2);
2. 배열의 값이 변경되거나 통과하도록 참조됩니다.

array_diff_key ()는 키 이름을 기준으로 비교되며 배열의 값을 비교하지 않습니다. 따라서 배열을 전달하는 동안 원래 배열에 대한 참조를 실수로 수정하면 결과가 잘못 될 수 있습니다.

 $array1 = [
    'apple' => 1,
    'banana' => 2
];

$array2 = &$array1;  // 참조 패스

$array2['apple'] = 3;

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

위 코드에서 $ array2$ array1 에 대한 참조이므로 값을 수정하면 $ array1 에도 영향을 미칩니다. 이 경우 array_diff_key () 의 비교 결과는 예상보다 나빠질 수 있습니다.

해결 방법 : 어레이에 참조를 전달하지 않거나 작동하기 전에 배열을 복사하지 마십시오.

 $array2 = $array1;
3. 키 이름에는 특수 문자 또는 공백이 포함되어 있습니다

때로는 배열의 주요 이름에는 공백, 탭 또는 기타 제어 문자와 같은 보이지 않는 문자가 포함될 수 있습니다. 이 문자는 시각적으로 표시되지 않지만 Array_Diff_Key () 의 비교 결과에 영향을 미칩니다. 예를 들어:

 $array1 = [
    'apple' => 1,
    ' banana' => 2
];

$array2 = [
    'apple' => 1,
    'banana' => 2
];

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

위의 코드에서 $ array1'바나나' 키 (앞에 공간이있는)는 $ array2'바나나' 키와 일치하지 않으므로 요소가 출력 결과에 잘못 포함됩니다.

해결 방법 : trim () 또는 정규식을 사용하여 불필요한 공간이나 특수 문자를 제거 할 수 있습니다.

 $array1 = array_map('trim', $array1);
$array2 = array_map('trim', $array2);
4. array_diff_key ()는 다차원 배열을 지원하지 않습니다

Array_Diff_Key ()는 1 차원 배열의 주요 이름 만 비교할 수 있습니다. 배열이 다차원 인 경우 array_diff_key ()는 서브 어레이에서 키를 재귀 적으로 비교하지 않습니다.

 $array1 = [
    'fruits' => [
        'apple' => 1,
        'banana' => 2
    ]
];

$array2 = [
    'fruits' => [
        'banana' => 2
    ]
];

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

이 시점에서 Array_diff_key ()는 '과일' 키의 차이를 반환하지 않습니다. 최상위 키 이름 만 비교합니다.

솔루션 : 다차원 배열 키를 비교 해야하는 경우 재귀 방법을 사용하여이를 달성 할 수 있습니다. 다차원 배열을 통해 반복하여 재귀 기능을 작성하고 주요 비교를 수행 할 수 있습니다.

 function recursive_diff_key($array1, $array2) {
    $result = [];
    foreach ($array1 as $key => $value) {
        if (!array_key_exists($key, $array2)) {
            $result[$key] = $value;
        } elseif (is_array($value)) {
            $result[$key] = recursive_diff_key($value, $array2[$key] ?? []);
        }
    }
    return $result;
}

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

3. 결론

Array_Diff_Key () 는 매우 유용한 PHP 기능이지만 사용할 때 문제가 발생하기 쉽습니다. 일반적인 실수를 이해하고 효과적으로 문제를 해결하면 개발 작업을보다 원활하게 완료하는 데 도움이 될 수 있습니다. 키 이름 유형이 일관되게, 참조 통과를 피하고, 특수 문자를 정리하고, 다차원 배열 작업을 적시에 작업하는지 확인하여 가장 일반적인 문제를 피할 수 있습니다.

이 기사의 도입이 Array_Diff_Key () 의 잠재적 인 문제를 이해하고 솔루션을 제공하는 데 도움이되기를 바랍니다.