Array_Diff_Key () 는 PHP의 함수로 두 개의 배열을 비교하고 키 이름이 다른 요소를 반환합니다. 그 기능은 단순 해 보이지만 실제로 사용하는 동안 때로는 제대로 작동하지 않습니다. 이 기사에서는 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 에 나타나지 않는 항목을 반환합니다.
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);
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;
때로는 배열의 주요 이름에는 공백, 탭 또는 기타 제어 문자와 같은 보이지 않는 문자가 포함될 수 있습니다. 이 문자는 시각적으로 표시되지 않지만 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);
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);
Array_Diff_Key () 는 매우 유용한 PHP 기능이지만 사용할 때 문제가 발생하기 쉽습니다. 일반적인 실수를 이해하고 효과적으로 문제를 해결하면 개발 작업을보다 원활하게 완료하는 데 도움이 될 수 있습니다. 키 이름 유형이 일관되게, 참조 통과를 피하고, 특수 문자를 정리하고, 다차원 배열 작업을 적시에 작업하는지 확인하여 가장 일반적인 문제를 피할 수 있습니다.
이 기사의 도입이 Array_Diff_Key () 의 잠재적 인 문제를 이해하고 솔루션을 제공하는 데 도움이되기를 바랍니다.