php에서 array_diff_uassoc ()는 키 이름의 차이와 두 개 이상의 배열의 주요 값을 비교하는 데 사용되는 함수입니다. 배열의 값을 비교할뿐만 아니라 사용자 정의 콜백 함수를 기반으로 배열의 키를 비교합니다. 단일 차원 배열을 처리 할 때 Array_diff_uassoc () 는 사용하기가 비교적 간단하지만 다차원 배열을 처리 할 때는 어떻게 주요 값 차이 비교를 달성 할 수 있습니까? 이 기사는이 질문에 답변하고 실질적인 예를 제공합니다.
먼저 Array_diff_uassoc () 의 기본 사용법을 검토해 봅시다. 구문은 다음과 같습니다.
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
Array1 : 비교할 첫 번째 배열.
Array2 : 두 번째 배열은 첫 번째 배열과 비교됩니다.
key_compare_func : 두 배열의 키를 비교하는 데 사용되는 사용자 정의 콜백 함수. 함수는 두 키를 비교 한 결과를 나타내는 정수를 반환해야합니다.
차동 요소를 포함하는 배열, 즉 Array1 에 존재하지만 Array2 에 있지 않은 키 값 쌍을 반환합니다.
function compare_keys($key1, $key2) {
return strcasecmp($key1, $key2);
}
$array1 = [
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
];
$array2 = [
'A' => 'apple',
'B' => 'banana',
'd' => 'date'
];
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
산출:
Array
(
[c] => cherry
)
위에서 볼 수 있듯이 Array_diff_uassoc ()는 배열의 키를 비교하고 두 키가 콜백 함수 compare_keys () 에 따라 동일인지 여부를 결정합니다.
다차원 배열의 경우 최상위 키뿐만 아니라 중첩 어레이의 키를 비교해야 할 수도 있습니다. 이 경우 Array_diff_uassoc ()는 다차원 배열에서 직접 사용할 수 없습니다. 이 상황을 처리하기 위해 추가 작업을 수행해야합니다.
재귀 적으로 다차원 배열 : 다차원 배열은 중첩 구조이므로 재귀 방법을 사용하여 각 배열 층을 처리 할 수 있습니다.
사용자 정의 콜백 함수를 사용한 주요 값 비교 : 재귀 프로세스 중에 각 배열 계층의 키 값 차이 비교를위한 콜백 함수를 정의 할 수 있습니다.
function compare_keys($key1, $key2) {
return strcasecmp($key1, $key2);
}
function recursive_array_diff_uassoc($array1, $array2, $key_compare_func) {
$result = [];
foreach ($array1 as $key => $value) {
// 현재 값이 배열 인 경우,재귀 호출
if (is_array($value)) {
$sub_result = recursive_array_diff_uassoc($value, $array2[$key] ?? [], $key_compare_func);
if (!empty($sub_result)) {
$result[$key] = $sub_result;
}
} else {
// 대상 배열의 값과 현재 값을 비교
if (!isset($array2[$key]) || $key_compare_func($key, $key) !== 0) {
$result[$key] = $value;
}
}
}
return $result;
}
$array1 = [
'a' => 'apple',
'b' => ['ba' => 'banana', 'bb' => 'blueberry'],
'c' => 'cherry'
];
$array2 = [
'a' => 'apple',
'b' => ['ba' => 'banana', 'bb' => 'blackberry'],
'd' => 'date'
];
$result = recursive_array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
산출:
Array
(
[b] => Array
(
[bb] => blueberry
)
[c] => cherry
)
이 예에서는 다차원 배열을 재귀 적으로 통과하고 각 배열 레벨에 대한 키 가치 차이 비교를 수행합니다. 다차원 배열을 비교할 때 중첩 배열을 별도로 처리합니다.
Array_Diff_Uassoc () 함수 자체는 다차원 배열의 키 값 차이 비교를 직접 지원하지는 않지만 재귀 수단을 통해 각 층의 주요 값 차이를 다차원 배열에서 비교할 수 있습니다. 사용자 정의 콜백 함수를 통해 주요 비교 방법을 정확하게 제어하여 비교를보다 유연하고 효율적으로 만들 수 있습니다. 위의 예를 통해 복잡한 다차원 배열을 처리하기 위해 array_diff_uassoc ()를 적용하는 방법을 명확하게 알 수 있습니다.