PHP: можно ли вызывать сортировку usort() функцией / методом?
Собственно вот код:
usort($array, function ($a, $b) use ($order) { ... много кода ... });
Проблема в том, что данный код встречается несколько раз на странице, сортировка абсолютно одинаковая, просто вставляются разные переменные $array и $order. Есть ли возможность записать эту сортировку в функцию или метод класса, чтобы потом просто вызывать обработку в нужном месте, а не плодить большое количество одинакового кода?
Ответы (2 шт):
Можно записать функцию сортировки в переменную и подставлять в usort() вместо анонимной функции эту переменную:
$array1 = [
'a',
'c',
'b',
];
$array2 = [
'а',
'в',
'б',
];
$sortFunction = function ($a, $b) {
return $a <=> $b;
};
usort($array1, $sortFunction);
print_r($array1);
usort($array2, $sortFunction);
print_r($array2);
Неудобство здесь может представлять пробрасывание значения use ($order) в функцию. Например, если этот вызов usort необходим в разных методах классах, где, конечно, $order будут свои собственные в каждом из них и из-за этого нет одного удобного места, где можно объявить анонимную функцию с use.
Но ничто не мешает сделать так:
function sortFunction($a, $b, $order)
{
// ... много кода ...
}
usort($array, function ($a, $b) use ($order) {
return sortFunction($a, $b, $order);
});
Вместо функции здесь можно, разумеется, так же объявить и вызвать метод класса.