다음과 같이 배열 정렬 기능이 있습니다.PHP에서 usort에 클로저를 전달할 수 있습니까?
public function sortAscending($accounts)
{
function ascending($accountA, $accountB) {
if ($accountA['AmountUntilNextTarget'] == $accountB['AmountUntilNextTarget']) {
return 0;
}
return ($accountA['AmountUntilNextTarget'] < $accountB['AmountUntilNextTarget']) ? -1 : 1;
}
usort($accounts, $ascending);
return $accounts;
}
검색 키를 하드 코딩하기 때문에 분명히 이상적이지 않습니다. 필자는 키를 외부 함수의 매개 변수로 전달함으로써이 일반 함수를 만들 것이라고 생각했지만 내부 함수에서는 범위를 벗어났습니다. 필자는 다음과 같이 내부 함수 대신 param에 액세스 할 수있는 클로저를 사용하여이 문제를 해결하려고했습니다.
public function sortAscending($accounts, $key)
{
$ascending = function($accountA, $accountB) {
if ($accountsA[$key] == $accountB[$key]) {
return 0;
}
return ($accountA[$key] < $accountB[$key]) ? -1 : 1;
}
usort($accounts, $ascending);
return $accounts;
}
그러나 usort()는 함수 이름 만 허용하므로 작동하지 않습니다. . 누구든지이 달성의 (더 나은?) 방법을 볼 수 있습니까?
는'usort'은 폐쇄 될 수있는'callback' 매개 변수를 받아들입니다. 코드에서 명백한 오류는 함수 정의 뒤에';'가 누락 된 것입니다. 어쩌면 그것이 오류의 원인 일 수 있습니다. – lonesomeday
누락 된';'외에도'$ key'도 클로저의 범위에 있지 않습니다. 당신은 그것을 사용해야한다 :'$ ascending = function ($ acciontA, $ accountB) use ($ key) {..'. – alexn