Array_Diff_Assoc () 는 PHP의 내장 비교 메커니즘을 기반으로하여 두 배열이 동일한 지 여부를 결정합니다. 표준 PHP 비교 연산자 ( == )를 사용합니다. 이 기능은 사용자 정의 비교 함수로 전달할 매개 변수를 제공하지 않으므로 비교 방식을 직접 변경할 수 없습니다.
구체적으로, array_diff_assoc () 함수의 구현은 콜백 함수 (예 : usort () , array_map () 및 기타 함수를 지원하여 수신 사용자 지정 기능을 지원하도록 설계되지 않았습니다. 이를 통해 특정 규칙 별 배열 값 비교 또는 배열을 비교할 때 특정 규칙을 사용하는 등 Array_Diff_Assoc () 에서 사용자 정의 비교 로직을 사용자 정의 할 수 없습니다.
기본적으로 Array_Diff_Assoc ()는 배열의 키와 값을 기반으로 표준 비교를합니다. 두 배열의 키가 동일하지만 값이 동일하지 않은 경우 array_diff_assoc ()는 차이 부분을 반환합니다. 예를 들어:
$array1 = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$array2 = [
"a" => "apple",
"b" => "berry",
"c" => "cherry"
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
산출:
Array
(
[b] => banana
)
이 예에서 Array_Diff_Assoc ()는 두 배열의 차이를 찾습니다. 키 "B" 가있는 값은 두 배열에서 다르므로 차이를 반환합니다.
그러나 특정 사용자 지정 규칙 (예 : 어떤 방식으로 문자열 비교, 케이스를 무시하고, 특정 문자를 무시하는 등)를 따르려면 Array_diff_assoc ()는 필요를 충족시키지 못합니다.
Array_Diff_Assoc () 자체는 사용자 정의 비교 함수를 지원하지 않지만 다른 방법을 통해 사용자 정의 비교 로직을 구현할 수 있습니다. 일반적인 솔루션은 Array_Filter () 와 사용자 정의 비교 함수를 통해 차이 비교를 수동으로 구현하는 것입니다.
다음은 array_diff_assoc ()을 사용자 정의 비교 함수로 바꾸는 예입니다.
function custom_compare($value1, $value2) {
// 예를 들어,비교 사례를 무시하십시오
return strcasecmp($value1, $value2) !== 0;
}
function custom_array_diff_assoc($array1, $array2) {
$result = [];
foreach ($array1 as $key => $value1) {
if (!array_key_exists($key, $array2) || custom_compare($value1, $array2[$key])) {
$result[$key] = $value1;
}
}
return $result;
}
$array1 = [
"a" => "Apple",
"b" => "banana",
"c" => "Cherry"
];
$array2 = [
"a" => "apple",
"b" => "Banana",
"c" => "Cherry"
];
$result = custom_array_diff_assoc($array1, $array2);
print_r($result);
산출:
Array
(
[a] => Apple
[b] => banana
)
이 예에서는 Custom_Cocpare () 라는 사용자 정의 비교 함수를 정의하여 비교를 위해 문자열의 상류 및 하부 사례를 무시합니다. custom_array_diff_assoc () 에서 먼저 두 배열에 키가 존재하는지 확인합니다. 존재하는 경우 사용자 정의 비교 함수를 통해 값이 동일한 지 판단 할 수 있습니다. 값이 다르면 키 값 쌍이 결과 배열에 추가됩니다.
이 방법은 우리에게 더 많은 유연성을 제공하고 우리의 요구에 따라 비교 로직을 사용자 정의 할 수 있습니다.
비교 로직을 수동으로 구현하는 것 외에도 Array_udiff_Assoc () 와 같은 다른 내장 함수를 사용할 수도 있습니다.이 기능은 사용자 정의 비교 함수를 사용하여 배열의 차이를 비교할 수 있습니다. array_udiff_assoc () 함수의 원리는 Array_diff_assoc () 와 유사하지만 비교를 위해 사용자 정의 콜백 함수를 수용합니다.
샘플 코드 :
function custom_compare($value1, $value2) {
return strcasecmp($value1, $value2);
}
$array1 = [
"a" => "Apple",
"b" => "banana",
"c" => "Cherry"
];
$array2 = [
"a" => "apple",
"b" => "Banana",
"c" => "Cherry"
];
$result = array_udiff_assoc($array1, $array2, 'custom_compare');
print_r($result);
산출:
Array
(
[a] => Apple
[b] => banana
)
이 예에서 array_udiff_assoc () 함수는 Custom_Copare ()를 사용하여 두 배열의 차이를 비교하여보다 유연한 비교 동작을 허용합니다.