반응형
클래스 개인 함수와 함께 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'));
- 매뉴얼 페이지 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) 모델 클래스에서는 이렇게 불렀습니다.두 방법 모두 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
반응형
'source' 카테고리의 다른 글
다중 인수와 함께 multiprocessing pool.map을 사용하는 방법 (0) | 2022.12.28 |
---|---|
TypeScript 문자열에 번호 지정 (0) | 2022.12.28 |
MySQL 데이터베이스의 제약 조건 목록 (0) | 2022.12.28 |
열에 대한 데이터가 잘렸습니까? (0) | 2022.12.28 |
matplotlib 범례를 축 밖으로 이동하면 그림 상자에 의해 범례가 잘립니다. (0) | 2022.12.28 |