Как в php сделать сортировку по 2 или более полям?
У меня есть массив пользователей.
Как мне отсортировать пользователей таким образом, чтобы онлайн пользователи были в самом верху списка. И при этом чтобы они еще были отсортированы по дате регистрации?
Новые на самом верху.
Как мне отсортировать пользователей таким образом, чтобы онлайн пользователи были в самом верху списка. И при этом чтобы они еще были отсортированы по дате регистрации?
Новые на самом верху.
Нравится:
0
Полезно:
2
Может быть полезно
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
С ходу пока что пришел такой способ:
Результат:
<php
$users = [
['id' => 1, 'name' => 'Виктор', 'online' => true, 'registered_at' => '1994-01-15'],
['id' => 2, 'name' => 'Иван', 'online' => false, 'registered_at' => '1980-03-20'],
['id' => 3, 'name' => 'Николай', 'online' => false, 'registered_at' => '1990-11-10'],
['id' => 4, 'name' => 'Илья', 'online' => true, 'registered_at' => '1991-01-05'],
['id' => 5, 'name' => 'Александр', 'online' => true, 'registered_at' => '1992-02-14'],
];
usort($users, function($a, $b) {
// Сравнение по online статусу
if ($a['online'] !== $b['online']) {
// Online пользователи вверху списка
return $b['online'] - $a['online'];
}
// Если статус одинаковый, то сравниваем по дате регистрации
$dateA = strtotime($a['registered_at']);
$dateB = strtotime($b['registered_at']);
// Отправляем новых пользователей вверх списка
return $dateB - $dateA;
});
print_r($users);
Результат:
Array
(
[0] => Array
(
[id] => 1
[name] => Виктор
[online] => 1
[registered_at] => 1994-01-15
)
[1] => Array
(
[id] => 5
[name] => Александр
[online] => 1
[registered_at] => 1992-02-14
)
[2] => Array
(
[id] => 4
[name] => Илья
[online] => 1
[registered_at] => 1991-01-05
)
[3] => Array
(
[id] => 3
[name] => Николай
[online] =>
[registered_at] => 1990-11-10
)
[4] => Array
(
[id] => 2
[name] => Иван
[online] =>
[registered_at] => 1980-03-20
)
)
Нравится:
1
Полезно:
1