2017-04-05 9 views
0

array_uintersect_assoc의 비교 함수가 "첫 번째 인수가 두 번째보다 작거나 같거나 큰 것으로 간주되면 0보다 작거나 같은 정수 또는 0보다 큰 정수를 반환해야합니다"(http://php.net/manual/en/function.array-uintersect-assoc.php)라는 이유가 궁금했습니다. 두 배열을 비교할 때 부울 값만 필요합니다. 요소가 일치하거나 그렇지 않습니다.왜 array_uintersect_assoc은 부울이 아닌 반환 값과 비교 함수가 필요합니까?

이 동작이 나타나는 실제 이유는 무엇입니까?

답변

0

이 방법은 이러한 반환 전략을 사용하는 "클래식"비교 함수의 사용을 허용하기 위해이 방식으로 구현되었습니다. 이러한 함수는 일반적으로 세 개의 경우를 부울 반환 값으로 사용할 수없는 경우를 명시 할 수 있어야합니다.

그러나 이 부울 결과를 반환하는 비교 함수를 사용할 수도 있습니다. 약한 타입의 언어 인 php가 자동으로이를 변환하기 때문입니다. 기능 문서에 주어진 하나의 약간 변형 한 버전입니다 예를 살펴 :

<?php 
function mystrcasecmp($a, $b) { 
    return strcasecmp($a, $b) ? true : false; 
} 

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); 
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red"); 

print_r(array_uintersect_assoc($array1, $array2, "mystrcasecmp")); 

현재 사용되는 비교 함수는 부울을 반환, 아직 결과는 정확히 같은 것을 볼 수 있습니다.

결론 : 기존 구현은보다 유연하며 부울 결과도 반환하는 비교 함수를 사용할 수 있습니다.