Если вам нужно отсортировать только по одному полю, тогда usort
- хороший выбор. Однако решение быстро становится беспорядочным, если вам нужно отсортировать по нескольким полям. В этом случае можно использовать YaLinqo library *, которая реализует синтаксис SQL-подобных запросов для массивов и объектов. Он имеет красивый синтаксис для всех случаев:
$sortedByName = from($objects)->orderBy('$v->name');
$sortedByCount = from($objects)->orderBy('$v->count');
$sortedByCountAndName = from($objects)->orderBy('$v->count')->thenBy('$v->name');
Здесь '$v->count'
является сокращением для function ($v) { return $v->count; }
(может использоваться любой из них). Эти цепочки методов возвращают итераторы, но вы можете получить массивы, добавив ->toArray()
в конце, если вам это нужно.
* разработано мной