CHashtag

[PHP] Array의 내의 Object의 특정 요소로 정렬하기 본문

PHP

[PHP] Array의 내의 Object의 특정 요소로 정렬하기

HyoSeong 2021. 12. 20. 14:45
반응형

안녕하세요.

 

오늘은 Object가 담겨있는 Array를 Object의 특정 요소로 정렬하는 방법에 대해 알아보도록 하겠습니다.

 

Array 데이터는 아래와 같다고 가정합니다.

Array
(
    [0] => stdClass Object
        (
            [name] => Henry
            [age] => 41
        )

    [1] => stdClass Object
        (
            [name] => John
            [age] => 22
        )

    [2] => stdClass Object
        (
            [name] => Kevin
            [age] => 38
        )
)

 

이런 Array의 경우 일반적인 sort로는 정렬이 불가능합니다. 왜냐하면 정렬 기준이 명확하지 않기 때문이죠.

 

그렇기 때문에 정렬 기준을 정의해주어야 합니다.

 

아래는 나이순으로 정렬하는 방법입니다.

 

usort($temp_array, function($a, $b) {return strcmp($a->age, $b->age);});

 

 

이번에는 함수로 분리하도록 하겠습니다.

 

usort($group_storage_list, "sortFunction");

public function sortFunction($a, $b)
{
    return strcmp($a->age, $b->age);
}

 

주의할점은 usort의 두번째 인자에 string으로 넘겨줘야 한다는 것입니다.

 

이번에는 클래스 함수로 만들어보겠습니다.

 

class someClass {
    public function main() {
        usort($group_storage_list, array($this, "sortFunction"));
    }
    
    public function sortFunction($a, $b) {
        return strcmp($a->age, $b->age);
    }
}

 

이런 경우에는 array로 넘깁니다.

또한 $this는 string으로 넘기지 않습니다.

 

 

이번에는 static function 으로 변경해 보겠습니다.

 

class someClass {
    public function main() {
        usort($group_storage_list, array("someClass", "sortFunction"));
    }
    
    public static function sortFunction($a, $b) {
        return strcmp($a->age, $b->age);
    }
}

 

이번에는 class와 함수를  순서대로 string으로 넘겨주면 됩니다.

 

 

 

오늘도 평화로운 PHP..

 

 

참고 링크: https://stackoverflow.com/questions/6053994/using-usort-in-php-with-a-class-private-function/50173847#50173847

 

Using usort in php with a class private function

ok using usort with a function is not so complicated This is what i had before in my linear code function merchantSort($a,$b){ return ....// stuff; } $array = array('..','..','..'); to sort i

stackoverflow.com

 

감사합니다.

도움이 되었길 바랍니다.

반응형