Array_diff_ukey () 는 PHP에서 매우 유용한 기능입니다. 이를 통해 사용자 정의 비교 함수를 기반으로 두 배열의 키를 비교 한 다음 첫 번째 배열에는 존재하지만 두 번째 배열에는없는 키 값 쌍이 포함 된 배열을 반환 할 수 있습니다. 이 기능은 매우 직관적이지만, 특히 배열에서 중복 키를 다룰 때 동작이 혼란 스러울 수 있습니다.
array_diff_ukey () 함수의 기본 구문은 다음과 같습니다.
array_diff_ukey(array $array1, array $array2, callable $key_compare_func) : array
$ array1 : 첫 번째 입력 배열.
$ array2 : 두 번째 입력 배열.
$ key_compare_func : 두 키를 비교하기위한 사용자 정의 콜백 함수. 이 함수는 두 매개 변수를 수용하고 두 키 사이의 관계를 나타내는 정수 값을 반환해야합니다.
array_diff_ukey ()를 사용하여 키 값 쌍의 차이를 비교할 때 PHP는 두 배열의 키를 가로 지르고 사용자가 제공 한 비교 함수를 통해 키가 동일인지 판단합니다. 중복 키가 존재하면 PHP의 동작이 우리가 기대하는 것이 아닐 수도 있습니다.
입력 배열에 중복 키가 포함 된 경우 array_diff_ukey ()는 각 키의 값을 비교할 두 번째 배열 키와 비교합니다. 특히, 두 배열에 동일한 키가 있지만 키가 배열의 다른 위치에있는 경우, PHP는 키의 마지막 발생을 기반으로 비교하여 이전에 나타나는 반복 된 키를 무시합니다.
배열에 여러 중복 키가 있으면 Array_Diff_ukey ()는 마지막으로 키의 발생에 따라 비교를 수행합니다. 예를 들어 다음 두 배열이 있다고 가정합니다.
$array1 = [
1 => 'apple',
2 => 'banana',
2 => 'orange',
3 => 'pear'
];
$array2 = [
2 => 'grape',
4 => 'watermelon'
];
이 예에서 키 2 는 $ array1 에서 반복됩니다. array_diff_ukey ()를 호출 하여이 두 배열을 비교하십시오.
$result = array_diff_ukey($array1, $array2, function($key1, $key2) {
return $key1 - $key2;
});
키 2가 두 번 나타나지만 Array_diff_ukey ()는 2 (즉, 주황색 에 해당하는 키)와 비교하고 Key 2와 $ array2 의 키 2 와 비교합니다. 결과적으로 키 2는 동일하게 간주되므로 결과 배열에는 키가 나타나지 않습니다.
비교 함수의 논리가 복잡하고 특정 비교 규칙을 포함하는 경우,이 비교 방법은 우리가 이상적으로 생각하는 것이 아닐 수도 있지만 각 키의 마지막 발생에 따라 Array_diff_ukey ()가 여전히 비교됩니다. 현재 프로그래머는 불필요한 혼란을 피하기 위해 배열의 준비 단계에서 중복 키를 처리하는 것을 고려할 수 있습니다.
중복 키가 array_diff_ukey () 의 비교 결과에 영향을 미치지 않도록 배열을 처리한다고 가정 해 봅시다. 먼저 Array_unique () 함수를 사용하여 중복 키를 제거한 다음 차이 계산을 수행 할 수 있습니다.
$array1 = [
1 => 'apple',
2 => 'banana',
2 => 'orange',
3 => 'pear'
];
$array2 = [
2 => 'grape',
4 => 'watermelon'
];
// 중복 키를 제거하십시오
$array1 = array_unique($array1, SORT_REGULAR);
$result = array_diff_ukey($array1, $array2, function($key1, $key2) {
return $key1 - $key2;
});
이 예에서는 먼저 Array_unique ()를 사용하여 $ array1 에서 중복 키를 제거하여 키 값 비교가 더 정확한지 확인합니다.
Array_diff_ukey () 는 PHP에서 매우 강력한 배열 차이 기능이지만 반복 된 키에 직면 할 때 동작이 혼란 스러울 수 있습니다. PHP는 각 키의 마지막 값을 사용하여 비교하므로 중복 키는 무시됩니다. 중복 키가 결과에 미치는 영향을 피하기 위해 개발자는 Array_diff_ukey ()를 사용하기 전에 배열의 중복 제거로 예상대로 비교 작업을 수행 할 수 있도록 할 수 있습니다.