program tip

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

radiobox 2020. 7. 26. 12:51
반응형

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


함수에 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) 모델 클래스에서 나는 이것을 이렇게 불렀습니다. 두 방법 모두 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")

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

반응형