현재 위치: > 최신 기사 목록> array_intersect_uassoc의 키-값 쌍 순서가 일치하지 않으면 어떻게해야합니까?

array_intersect_uassoc의 키-값 쌍 순서가 일치하지 않으면 어떻게해야합니까?

gitbox 2025-05-26

PHP에서 array_intersect_uassoc 함수는 두 배열의 키와 값을 비교하여 키 값 쌍이 두 배열에서 동일한 부분을 반환합니다. Array_intersect_assoc 과는 다른 점은 Array_intersect_uassoc을 사용하면 사용자가 키의 비교 기능을 사용자 정의 할 수 있다는 것입니다.

1. array_intersect_uassoc 의 기본 사용

함수는 다음과 같이 정의됩니다.

 array_intersect_uassoc(array $array1, array $array2, callable $key_compare_func): array
  • $ array1$ array2 는 비교에 참여하는 두 개의 배열입니다.

  • $ key_compare_func는 키를 비교하기위한 사용자 정의 함수이며 반환 값은 strcmp 와 유사합니다.

2. 순서가 일관되지 않은 경우 성능

키-값 배열 쌍의 순서가 일치하지 않으면 array_intersect_uassoc는 키와 값 사이의 해당 관계에 따라 여전히 비교됩니다. 즉, 키와 값은 배열의 순서에 관계없이 결과에 "동일"해야합니다.

예를 들어:

 <?php
$array1 = [
    'a' => 1,
    'b' => 2,
];

$array2 = [
    'b' => 2,
    'a' => 1,
];

$result = array_intersect_uassoc($array1, $array2, 'strcmp');

print_r($result);

산출:

 Array
(
    [a] => 1
    [b] => 2
)

$ array2 의 키 값 쌍의 순서가 $ array1 과 다르더라도 결과에는 여전히 일치하는 모든 키 값 쌍이 포함되어 있습니다.

3. 사용자 정의 비교 함수가 순서가 결과에 영향을 미치는 경우

사용자 정의 비교 함수가 순서에 민감하다고 가정하면 일치 실패가 발생할 수 있습니다. 기본 문자열 비교 함수 strcmp 는 주문 독립적이지만, 쓴 비교 함수에 순서 또는 기타 조건이 포함 된 경우 결과가 다를 수 있습니다.

키 값 쌍이 다른 순서에 있어도 올바르게 일치 할 수 있는지 확인하려면 다음 제안을 따를 수 있습니다.

  • 비교 함수가 키 자체의 값 만 비교하고 순차적 인 관련 논리를 가져 오지 않도록하십시오 .

  • 먼저 배열의 키를 정렬 한 다음 주문 차이의 영향을 피하기 위해 array_intersect_uassoc을 사용하십시오.

예 : 먼저 정렬 한 다음 비교하십시오

 <?php
$array1 = [
    'b' => 2,
    'a' => 1,
];

$array2 = [
    'a' => 1,
    'b' => 2,
];

// 키를 정렬하십시오
ksort($array1);
ksort($array2);

$result = array_intersect_uassoc($array1, $array2, 'strcmp');

print_r($result);

이러한 방식으로, 초기 순서가 다르더라도 정렬 후 순서가 일관되게되어 예상치 못한 주문 차이를 피할 수 있습니다.

4. 요약

  • Array_intersect_uassoc 키와 값을 비교하고 순서 자체는 일치하는 결과에 영향을 미치지 않습니다.

  • 맞춤형 키 비교 기능은 순차적으로 관련된 논리를 포함하지 않아야합니다.

  • 안전한 측면에 있으려면 ksort ()를 사용하여 먼저 비교에 참여하는 배열을 정렬하여 균일 한 순서를 보장 할 수 있습니다.


 <?php
$array1 = [
    'b' => 2,
    'a' => 1,
];

$array2 = [
    'a' => 1,
    'b' => 2,
];

ksort($array1);
ksort($array2);

$result = array_intersect_uassoc($array1, $array2, 'strcmp');

print_r($result);