Mam tablicę funkcji sortowania następująco:Możliwe jest przekazanie zamknięcia do usortowania w PHP?
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;
}
Oczywiście to nie jest idealne, ponieważ trudno jest kodowanie klucza do wyszukania. Myślałem, że zrobię ten rodzajnik, przekazując klucz jako parametr do funkcji zewnętrznej, ale jest to poza zakresem w funkcji wewnętrznej. Próbowałem to obejść za pomocą zamknięcia, które będzie miało dostęp do param, zamiast wewnętrznej funkcji w następujący sposób:
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;
}
Jednak usort() przyjmuje tylko nazwy funkcji, tak to nie działa . Czy ktokolwiek może zobaczyć (lepszy?) Sposób osiągnięcia tego?
'' usort' akceptuje parametr callback', który może być zamknięcie. Oczywistym błędem w twoim kodzie jest brakujące ';' po definicji funkcji. Może to jest przyczyną błędu. – lonesomeday
Oprócz brakującego ';', '$ key' również nie znajduje się w zasięgu twojego zamknięcia. Powinieneś go użyć: '$ rosnąco = funkcja ($ acciontA, $ accountB) use ($ key) {..'. – alexn