Как отсортировать массив массивов по полю
Короткий ответ
usort() с оператором <=> сравнивает элементы по нужному полю:
<?php
$users = [['name' => 'Oleg', 'age' => 31], ['name' => 'Anna', 'age' => 25]];
usort($users, fn ($a, $b) => $a['age'] <=> $b['age']);
echo implode(', ', array_column($users, 'name'));Результат:
Anna, OlegПо убыванию
Поменяйте $a и $b местами:
<?php
$users = [['name' => 'Oleg', 'age' => 31], ['name' => 'Anna', 'age' => 25]];
usort($users, fn ($a, $b) => $b['age'] <=> $a['age']);
echo implode(', ', array_column($users, 'name'));Результат:
Oleg, AnnaПо нескольким полям
Сравните массивы из нужных полей — они сравниваются по порядку:
<?php
$users = [['name' => 'Oleg', 'age' => 25], ['name' => 'Anna', 'age' => 31], ['name' => 'Anna', 'age' => 25]];
usort($users, fn ($a, $b) => [$a['name'], $a['age']] <=> [$b['name'], $b['age']]);
echo implode(' ', array_map(fn ($user) => $user['name'] . $user['age'], $users));Результат:
Anna25 Anna31 Oleg25Функции из этого ответа
- usort — Сортирует массив по своему правилу сравнения.
- array_column — Достаёт значения одного ключа из массива массивов.
- uasort — Сортирует массив по своему правилу, сохраняя ключи.