PHP에서 배열 차이 세트를 처리 할 때 Array_Diff () 및 Array_Diff_ukey () 는 자주 언급 된 두 가지 기능입니다. 그러나 일부 특정 요구에 대해 개발자가 Array_Diff_Ukey ( ) 대신 Array_Diff ()와 함께 Array_Keys () 를 사용하는 경향이 있습니다. 이 배후의 고려 사항은 무엇입니까? 이 기사는 예제를 결합 하여이 두 가지 방법의 효과를 분석하고 장점과 단점을 비교합니다.
Array_diff_ukey ()는 사용자 정의 콜백 함수를 기반으로 두 배열의 키를 비교하는 데 사용되며 첫 번째 배열에는 존재하지만 다른 배열에는 존재하지 않는 부분을 반환합니다. 이 함수의 구문은 다음과 같습니다.
array array_diff_ukey(array $array1, array $array2, callable $key_compare_func);
예를 들어:
function key_compare($a, $b) {
return strcmp($a, $b);
}
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 4, "d" => 5];
$result = array_diff_ukey($array1, $array2, 'key_compare');
print_r($result); // 산출: Array ( [a] => 1 [c] => 3 )
Array_diff_ukey () 는 비교를 위해 콜백 함수를 사용하므로 성능에 특정 영향을 미치고 코드의 복잡성을 증가시킵니다. 경우에 따라 다음과 같이 대체 할 수 있습니다.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 4, "d" => 5];
// 키 차이를 설정하십시오
$diffKeys = array_diff(array_keys($array1), array_keys($array2));
// 새 배열을 구성하십시오
$result = array_intersect_key($array1, array_flip($diffKeys));
print_r($result); // 산출: Array ( [a] => 1 [c] => 3 )
이 방법의 논리는 다음과 같습니다.
먼저 두 배열의 주요 이름을 얻습니다.
array_diff ()를 사용하여 키 차이 세트를 계산합니다.
그런 다음 Array_Intersect_key () 를 통해 원래 배열에서 해당 키 값을 추출하십시오.
비교 항목 | Array_diff_ukey () | Array_Keys () + array_diff () |
---|---|---|
가독성 | 매체, 비교 함수를 정의해야합니다 | 더 높고 명확한 논리 |
유연성 | 높은 사용자 정의 가능한 비교 로직 | 일반적으로 기본값은 문자열 비교입니다 |
성능 | 콜백 함수와 관련하여 약간 느리게 | 일반적으로 특히 많은 양의 데이터에 대해 더 빠릅니다 |
호환성 | PHP는 지원하여 내장되어 있습니다 | 기본 기능, 강력한 호환성을 기반으로합니다 |
해당 시나리오 | 복잡한 키 비교 논리 | 간단한 주요 차이 설정 판단 |
유지 가능성 | 불쌍한 콜백 함수는 오류가 발생하기 쉽습니다 | 좋아, 명확한 구조 |
대부분의 경우 배열 키에 차이가 있는지 여부를 비교 해야하는 경우 Array_Keys () + Array_Diff ()를 사용하여 Array_Intersect_key () 를 사용하여 더 직관적이고 읽기 쉽고 성능이 향상됩니다. 또한 비교 로직 (예 : 사례 감도, 수치 비교 등)을 사용자 정의 해야하는 경우 Array_diff_ukey () 는 더 적합한 도구입니다.