Коротко: сортировка массива в PHP зависит от задачи: sort() и rsort() сортируют по значению с потерей ключей, asort() и arsort() сохраняют ключи, а usort() сортирует по своему правилу и работает с многомерными массивами.
Функции сортировки
| Функция | Что сортирует |
|---|---|
sort() |
по значению, ключи теряются |
rsort() |
по значению в обратном порядке |
asort() |
по значению, ключи сохраняются |
ksort() |
по ключам |
usort() |
по своему правилу |
Простая сортировка
php
$nums = [3, 1, 2];
sort($nums); // [1, 2, 3]
$prices = ['a' => 300, 'b' => 100];
asort($prices); // ['b' => 100, 'a' => 300]asort() сохраняет привязку ключей — удобно, когда после сортировки нужно понять, к какому элементу относится значение.
Вкладки: свои правила
php
usort($arr, fn($a, $b) => $a <=> $b);
usort($arr, fn($a, $b) => $b - $a); // по убыванию<=> возвращает -1, 0 или 1, что идеально подходит для сравнения. usort() даёт полный контроль над порядком.
php
$users = [
['name' => 'Аня', 'age' => 30],
['name' => 'Борис', 'age' => 25],
];
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);Многомерные массивы сортируют по нужному ключу через usort() — функция сравнивает поля элементов.
php
$names = ['Борис', 'Аня', 'Вова'];
$ages = [25, 30, 20];
array_multisort($ages, SORT_ASC, $names);array_multisort() сортирует несколько массивов параллельно: вместе со значениями меняется порядок связанного массива.
sort, rsort и usort меняют массив «на месте» и возвращают не результат, а признак успеха. Не присваивайте их результат массиву — присваивание затрёт данные.Практика: отсортировать массив
- Определите, сортируете по значению или ключу.
- Ключи важны —
asort/arsort. - Ключи не важны —
sort/rsort. - Свой порядок —
usort. - Несколько связанных массивов —
array_multisort. - Проверьте результат через
print_r.
Частые ошибки: причина → решение
| Симптом | Причина | Решение |
|---|---|---|
| Пропали ключи | использован sort |
asort |
| Массив обнулился | присвоен результат sort |
не присваивать |
| Сортировка строк как чисел | нет числового сравнения | привести типы |
| Неверный порядок чисел | строковое сравнение | usort с <=> |
| Кириллица сортируется странно | локаль/кодировка | выровнять кодировку |
Проверьте себя
Вопросы и ответы
sort() заново нумерует элементы и удаляет исходные ключи. Если привязка ключей важна, используйте asort() или uasort().
Для простых массивов — rsort() или arsort(). В usort() поменяйте местами операнды или используйте $b <=> $a.
Функция сортирует массив непосредственно и возвращает лишь признак успеха. Поэтому результат не нужно присваивать — иначе массив превратится в true.
В usort() сравните сначала первый ключ, а при равенстве — второй. Так получают сортировку «сначала по цене, затем по названию».
Итоги
sort/rsortсортируют по значению без ключей.asort/arsortсохраняют ключи.usortзадаёт своё правило и работает с многомерными массивами.- Результат этих функций не присваивают массиву.

Комментарии
Пока комментариев нет — будьте первым, кто поделится мнением.