Можно ли передать закрытие в usort в 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;
}

Очевидно, это не идеально, поскольку это жестко запрограммировать ключ для поиска. Я подумал, что сделаю это общим, передав ключ в качестве параметра внешней функции, однако тогда это выходит за рамки внутренней функции. Я попытался обойти это, используя замыкание, которое будет иметь доступ к параметру вместо внутренней функции следующим образом:

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 () принимает только имя функции, поэтому это не работает. Кто-нибудь может увидеть (лучший?) способ достижения этого?

6
задан kapa 9 June 2011 в 15:17
поделиться