PHP에서 array_diff_uassoc () 함수는 둘 이상의 배열을 비교하고 첫 번째 배열에 포함되어 있지만 다른 배열에는 그렇지 않은 배열을 반환하는 데 사용됩니다. 동시에 Array_diff_uassoc ()를 사용하면 사용자 정의 비교 함수를 사용하여 배열의 주요 이름을 비교할 수 있습니다.
그러나 익명 함수를 하위 버전의 PHP에서 array_diff_uassoc () 의 콜백 함수로 사용하면 오류가 발생할 수 있습니다. 이 문제를 이해하려면 먼저 주요 배경 지식을 이해해야합니다.
array_diff_uassoc () 의 함수 서명은 다음과 같습니다.
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func) : array
안에:
$ array1 은 첫 번째 배열이고 $ array2는 다른 배열입니다.
$ key_compare_func는 키를 배열과 비교하는 사용자 정의 비교 함수입니다.
낮은 버전의 PHP에서 익명 함수 (즉, 클로저)는 특정 내장 함수, 특히 Array_Diff_Uassoc () 와 같은 기능으로의 콜백으로 전달되는 전달을 완전히 지원하지 않습니다. Array_diff_uassoc () 의 문서를 통해 세 번째 매개 변수 $ key_compare_func가 호출 가능한 함수 여야한다는 것을 알 수 있습니다. PHP 5.3 이후 PHP는 익명 기능을 지원하지만 일부 버전의 PHP에서는 익명 기능이 콜백 함수로 잘 지원되지 않으므로 오류가 발생합니다.
이전 버전의 PHP (예 : PHP 5.3 이상)에서 다음 코드는 오류를보고합니다.
<?php
$array1 = [1 => 'apple', 2 => 'banana', 3 => 'cherry'];
$array2 = [1 => 'apple', 2 => 'orange', 4 => 'grape'];
$result = array_diff_uassoc($array1, $array2, function($a, $b) {
return $a - $b;
});
?>
이 코드의 목적은 익명 함수를 통해 배열의 주요 값을 비교하는 것입니다. 그러나 PHP 5.3 미만의 버전에서는 PHP가 익명 함수를 올바르게 구문 분석하고 콜백 함수로 전달할 수 없기 때문에 이러한 코드는 오류를보고합니다.
이 문제를 해결하기 위해 익명 함수를 명명 된 함수로 바꿀 수 있습니다. 모든 버전의 PHP에서 명명 된 기능을 올바르게 처리 할 수 있습니다.
<?php
function compare_keys($a, $b) {
return $a - $b;
}
$array1 = [1 => 'apple', 2 => 'banana', 3 => 'cherry'];
$array2 = [1 => 'apple', 2 => 'orange', 4 => 'grape'];
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
?>
이 방법은 모든 버전의 PHP에서 제대로 작동하여 익명 기능으로 인한 가능한 문제를 피합니다.
가능하면 PHP를 5.3 이상으로 업그레이드하는 것이 좋습니다. PHP 5.3 이상에서는 익명 함수 (클로저)가 콜백 함수로 더 잘 지원됩니다. 따라서 프로젝트에서 이전 PHP 버전을 사용하는 경우 유사한 호환성 문제를 피하기 위해 PHP 버전을 업그레이드하는 것이 좋습니다.
PHP에서 Array_Diff_Uassoc ()를 사용하는 경우 콜백 함수가 익명 함수 인 경우, 하위 버전의 PHP가 오류를보고합니다. 문제의 근본은 익명 기능에 대한 지원이 특히 PHP 5.3 이전 버전에서 제한되어 있다는 것입니다. 솔루션은 익명 함수 대신 이름 지정된 기능을 사용하거나 PHP 버전을 업그레이드하여 익명 기능을 지원하는 것입니다.