좋아요 함수와 함께 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'));
답변
- 매뉴얼 페이지 http://www.php.net/usort를 엽니 다 .
- 에 대한 유형
$value_compare_func
은callable
- 링크 된 키워드를 클릭하면 http://php.net/manual/en/language.types.callable.php 로 이동합니다 .
- 구문이
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")