source

클래스 개인 함수와 함께 php에서 usort 사용

lovecheck 2022. 12. 28. 21:47
반응형

클래스 개인 함수와 함께 php에서 usort 사용

ok 기능과 함께 usort를 사용하는 것은 그다지 복잡하지 않다.

이건 내가 전에 가지고 있던 선형 코드야

function merchantSort($a,$b){
    return ....// stuff;
}

$array = array('..','..','..');

간단히 말하자면

usort($array,"merchantSort");

이제 코드를 업그레이드하고 모든 글로벌 기능을 제거하여 적절한 위치에 배치합니다.이제 모든 코드가 클래스에 포함되어 있습니다.usort 함수를 사용하여 단순한 함수 대신 객체 메서드인 매개 변수를 사용하여 어레이를 정렬하는 방법을 알 수 없습니다.

class ClassName {
   ...

   private function merchantSort($a,$b) {
       return ...// the sort
   }

   public function doSomeWork() {
   ...
       $array = $this->someThingThatReturnAnArray();
       usort($array,'$this->merchantSort'); // ??? this is the part i can't figure out
   ...

   }
}

문제는 usort() 함수 내의 오브젝트 메서드를 호출하는 방법입니다.

정렬 함수를 정적으로 설정합니다.

private static function merchantSort($a,$b) {
       return ...// the sort
}

두 번째 파라미터에는 배열을 사용합니다.

$array = $this->someThingThatReturnAnArray();
usort($array, array('ClassName','merchantSort'));
  1. 매뉴얼 페이지 http://www.php.net/usort를 엽니다.
  2. 의 타입을 확인하다$value_compare_funccallable
  3. 링크된 키워드를 클릭하여 http://php.net/manual/en/language.types.callable.php에 접속합니다.
  4. 구문이 다음과 같은 것을 알 수 있다array($this, 'merchantSort')

합격해야 합니다.$this예:usort( $myArray, array( $this, 'mySort' ) );

완전한 예:

class SimpleClass
{                       
    function getArray( $a ) {       
        usort( $a, array( $this, 'nameSort' ) ); // pass $this for scope
        return $a;
    }                 

    private function nameSort( $a, $b )
    {
        return strcmp( $a, $b );
    }              

}

$a = ['c','a','b']; 
$sc = new SimpleClass();
print_r( $sc->getArray( $a ) );

이 예에서는 AverageVote라는 배열 내의 필드를 기준으로 정렬하고 있습니다.

메서드를 콜에 포함할 수 있습니다.즉, 클래스 스코프의 문제가 없어집니다.이렇게 하면...

        usort($firstArray, function ($a, $b) {
           if ($a['AverageVote'] == $b['AverageVote']) {
               return 0;
           }

           return ($a['AverageVote'] < $b['AverageVote']) ? -1 : 1;
        });

Laravel (5.6) 모델 클래스에서는 이렇게 불렀습니다.두 방법 모두 public static이며 Windows 64비트에서 php 7.2를 사용합니다.

public static function usortCalledFrom() 

public static function myFunction()

이렇게 usortCalledFrom()을 호출했습니다.

usort($array,"static::myFunction")

이 중 어느 것도 일이 아니었다.

usort($array,"MyClass::myFunction")
usort($array, array("MyClass","myFunction")

가장 간단한 방법은 다음과 같이 정렬 함수를 호출하는 화살표 함수를 만드는 것입니다.

uasort($array, fn($a, $b) => $this->mySortFunction($a, $b, $optionalAdditionalParam))

...

private function mySortFunction($a, $b) {
    return -1; // replace with sort logic
}

언급URL : https://stackoverflow.com/questions/6053994/using-usort-in-php-with-a-class-private-function

반응형