PHP дополнительные параметры для usort - PullRequest
6 голосов
/ 21 сентября 2011

Следующий код лежит внутри функции, которая сама лежит в классе.Его цель - избежать использования одной функции сортировки на значение $ filter :

$GLOBAL['filter'] = $filter;
usort($this->data, function($arr1, $arr2) {
    return ($arr1[$GLOBALS['filter']] > $arr2[$GLOBALS['filter']]) ? 1 : -1;
});

Мое решение работает отлично, но я считаю его довольно не элегантным.Будет ли у кого-нибудь идея достичь той же цели, не прибегая к переменной $ GLOBALS?

Спасибо за ваши предложения

1 Ответ

25 голосов
/ 21 сентября 2011

Поскольку вы используете анонимную функцию, вы можете использовать ее как замыкание:

$filter = <whatever>;
usort($this->data, function($arr1, $arr2) use ($filter) {
    return ($arr1[$filter] > $arr2[$filter]) ? 1 : -1;
});
...