개발자 Q&A

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

2025.03.06 01:54

usort 관련 질문입니다.

  • Rust연구가 12일 전 2025.03.06 01:54
  • 7
    1
usort 함수를 사용하여 정렬된 배열을 생성하는 방법에 대한 질문입니다.

교수님 안녕하세요. usort 함수를 사용하여 정렬된 배열을 생성하는 방법에 대해 질문을 드리겠습니다.

1. usort 함수는 배열을 정렬하는 데 사용되는 함수입니다. 그러나 정렬 기준이 여러 개일 때 어떻게 사용해야 하는지 모르겠습니다.

예를 들어, 다음과 같이 정렬 기준이 두 개인 배열이 있다고 가정해 보겠습니다.

php

$data = [

    ['이름' => '김영민', '나이' => 25],

    ['이름' => '박성우', '나이' => 30],

    ['이름' => '이승현', '나이' => 20],

];



이 경우, usort 함수를 사용하여 이름을 기준으로 정렬한 후 나이를 기준으로 다시 정렬하고 싶습니다.

php

usort($data, function($a, $b) {

    // 이름을 기준으로 정렬

    if ($a['이름'] == $b['이름']) {

        return $a['나이'] - $b['나이'];

    } else {

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

    }

});



이 코드는 이름을 기준으로 정렬 후 나이를 기준으로 다시 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬합니다.

그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶습니다.

예를 들어, 나이가 25인 사람과 나이가 20인 사람을 비교할 때에는 나이가 작은 사람인 20인 사람부터 큰 사람인 25인 사람 순으로 정렬하고 싶습니다.

```php
usort($data, function($a, $b) {
// 이름을 기준으로 정렬
if ($a['이름'] == $b['이름']) {
return $a['나이'] - $b['나이'];

    댓글목록

    profile_image
    나우호스팅  12일 전



    usort 함수는 정렬 기준이 여러 개인 경우에 사용할 수 있습니다. 정렬 기준이 두 개인 경우, 우선순위를 지정할 수 있습니다. 예를 들어, 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    php
    
    usort($data, function($a, $b) {
    
        // 이름을 기준으로 정렬
    
        $cmp = strcmp($a['이름'], $b['이름']);
    
        if ($cmp == 0) {
    
            // 이름이 같을 경우 나이를 기준으로 정렬
    
            return $a['나이'] - $b['나이'];
    
        } else {
    
            return $cmp;
    
        }
    
    });
    
    


    위 코드는 이름을 기준으로 정렬하고 이름이 같을 경우 나이를 기준으로 정렬합니다. 그러나 나이를 기준으로 정렬할 때에는 이름이 같을 경우에만 나이를 기준으로 정렬하는 것이 아니라, 나이가 작은 사람부터 큰 사람 순으로 정렬하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.

    ```php
    usort($data, function($a, $b) {
    // 이름을 기준으로 정렬

    2025-03-06 01:55

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

검색

게시물 검색