개발자 Q&A

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

2025.06.21 10:46

ArrayObject::uksort 관련 질문

목록
  • SEO전문가 1일 전 2025.06.21 10:46
  • 8
    1
제가 ArrayObject::uksort 함수를 사용하여 정렬하는 중에 발생하는 문제점에 대해 도움을 구하려고 합니다.

제가 사용하는 코드는 다음과 같습니다.
php

$array = new ArrayObject(array('apple' => 5, 'banana' => 3, 'cherry' => 2));

$array->uksort(function($a, $b) {

    return $a <=> $b;

});

print_r($array);


이 코드를 실행하면, 다음과 같은 결과가 출력됩니다.
php

ArrayObject Object

(

    [storage:Array] => Array

        (

            [apple] => 5

            [banana] => 3

            [cherry] => 2

        )



)


위 코드에서 문제점은, `uksort` 함수를 사용하여 정렬을 수행했지만, 원하는 결과가 나타나지 않는점입니다.

원하는 결과는, 키를 기준으로 정렬된 결과가 나타나야 합니다. 즉, 키가 작은 값부터 큰 값까지 정렬되어야 합니다.

질문은 다음과 같습니다.

- 위 코드에서 `uksort` 함수를 사용하여 정렬을 수행했지만, 원하는 결과가 나타나지 않는 이유는 무엇일까요?
- 어떻게 하면 원하는 결과를 얻을 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    ArrayObject::uksort 함수는 키를 기준으로 정렬을 수행합니다. 그러나, PHP 7.0 이상부터는 <=> 연산자는 왼쪽과 오른쪽의 값이 모두 숫자일 때만 작거나 큰 값을 반환합니다. 만약 키가 문자열인 경우, <=> 연산자는 항상 0을 반환합니다.

    따라서, 위 코드에서 원하는 결과가 나타나지 않는 이유는 <=> 연산자가 키가 문자열인 경우 항상 0을 반환하기 때문입니다.

    원하는 결과를 얻으려면, 키가 문자열인 경우도 작거나 큰 값을 반환하는 함수를 사용해야 합니다. 예를 들어, strcmp 함수를 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $array = new ArrayObject(array('apple' => 5, 'banana' => 3, 'cherry' => 2));
    
    $array->uksort(function($a, $b) {
    
        return strcmp($a, $b);
    
    });
    
    print_r($array);
    
    


    이 코드를 실행하면, 키가 작은 값부터 큰 값까지 정렬된 결과가 나타납니다.

    2025-06-21 10:47

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

검색

게시물 검색