개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.26 18:05

array_uintersect_uassoc 함수 사용시 정렬이 안되는 문제

목록
  • NestJS전문가 4일 전 2025.03.26 18:05
  • 5
    1
선생님, array_uintersect_uassoc 함수를 사용하여 두 개의 배열을 비교했을 때, 정렬이 안되는 문제가 있습니다.

다음과 같이 두 개의 배열을 정렬하여 비교한 경우 정렬이 제대로 되지 않습니다.

php

$array1 = [

    ['name' => '이름1', 'age' => 20],

    ['name' => '이름2', 'age' => 30],

    ['name' => '이름3', 'age' => 10]

];



$array2 = [

    ['name' => '이름3', 'age' => 10],

    ['name' => '이름2', 'age' => 30],

    ['name' => '이름1', 'age' => 20]

];



$intersect = array_uintersect_uassoc($array1, $array2, function($a, $b) {

    if ($a['age'] == $b['age']) {

        return strcmp($a['name'], $b['name']);

    } else {

        return $a['age'] - $b['age'];

    }

}, function($a, $b) {

    if ($a['age'] == $b['age']) {

        return strcmp($a['name'], $b['name']);

    } else {

        return $a['age'] - $b['age'];

    }

});



print_r($intersect);



위의 코드에서 array_uintersect_uassoc 함수를 사용하여 두 개의 배열을 비교했을 때, 정렬이 제대로 되지 않는 문제가 있습니다.

이 문제를 해결하려면 어떻게 해야 할까요?

아래는 문제를 해결한 예제입니다.

```php
$array1 = [
['name' => '이름1', 'age' => 20],
['name' => '이름2', 'age' => 30],
['name' => '이름3', 'age' => 10]
];

$array2 = [
['name' => '이름3', 'age' => 10],
['name' => '이름2', 'age' => 30],
['name' => '이름1', 'age' => 20]
];

function compare($a

    댓글목록

    profile_image
    나우호스팅  4일 전



    array_uintersect_uassoc 함수는 두 개의 배열을 비교하고, 동일한 키를 가진 항목을 찾을 때 정렬을 수행합니다. 그러나, 이 함수는 항목을 정렬하기 전에 항목을 정렬하지 않기 때문에, 정렬이 제대로 되지 않을 수 있습니다.

    이 문제를 해결하려면, 두 개의 배열을 비교하기 전에 항목을 정렬해야 합니다. 예를 들어, 다음과 같이 코드를 수정할 수 있습니다.

    #hostingforum.kr
    php
    
    $array1 = [
    
        ['name' => '이름1', 'age' => 20],
    
        ['name' => '이름2', 'age' => 30],
    
        ['name' => '이름3', 'age' => 10]
    
    ];
    
    
    
    $array2 = [
    
        ['name' => '이름3', 'age' => 10],
    
        ['name' => '이름2', 'age' => 30],
    
        ['name' => '이름1', 'age' => 20]
    
    ];
    
    
    
    // 항목을 정렬하기 전에 정렬을 수행합니다.
    
    usort($array1, function($a, $b) {
    
        if ($a['age'] == $b['age']) {
    
            return strcmp($a['name'], $b['name']);
    
        } else {
    
            return $a['age'] - $b['age'];
    
        }
    
    });
    
    
    
    usort($array2, function($a, $b) {
    
        if ($a['age'] == $b['age']) {
    
            return strcmp($a['name'], $b['name']);
    
        } else {
    
            return $a['age'] - $b['age'];
    
        }
    
    });
    
    
    
    // 정렬된 항목을 비교합니다.
    
    $intersect = array_uintersect_uassoc($array1, $array2, function($a, $b) {
    
        if ($a['age'] == $b['age']) {
    
            return strcmp($a['name'], $b['name']);
    
        } else {
    
            return $a['age'] - $b['age'];
    
        }
    
    }, function($a, $b) {
    
        if ($a['age'] == $b['age']) {
    
            return strcmp($a['name'], $b['name']);
    
        } else {
    
            return $a['age'] - $b['age'];
    
        }
    
    });
    
    
    
    print_r($intersect);
    
    


    이 코드에서는, 두 개의 배열을 비교하기 전에 항목을 정렬하기 위해 usort 함수를 사용합니다. 이렇게 하면, 정렬이 제대로 되고, array_uintersect_uassoc 함수를 사용하여 항목을 비교할 수 있습니다.

    2025-03-26 18:05

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 7,697건 / 19 페이지

검색

게시물 검색