Как отсортировать многомерный массив PHP со сложными условиями?

Всем привет

Дан массив PHP, в нём 5 других
Массив
array(5) {
  [4]=>
  array(3) {
    ["autor_id"]=>
    int(4)
    ["count_msg"]=>
    int(5)
    ["last_date"]=>
    int(1606350743)
  }
  [2]=>
  array(3) {
    ["autor_id"]=>
    int(2)
    ["count_msg"]=>
    int(7)
    ["last_date"]=>
    int(1606350737)
  }
  [6]=>
  array(3) {
    ["autor_id"]=>
    int(6)
    ["count_msg"]=>
    int(29)
    ["last_date"]=>
    int(1606350733)
  }
  [1]=>
  array(4) {
    ["autor_id"]=>
    int(1)
    ["count_msg"]=>
    int(36)
    ["last_date"]=>
    int(1606350726)
    ["unread_pm"]=>
    int(1)
  }
  [3]=>
  array(3) {
    ["autor_id"]=>
    int(3)
    ["count_msg"]=>
    int(8)
    ["last_date"]=>
    int(1606349427)
  }
}


Требуется отсортировать массив таким образом, чтобы первыми шли те, в которых присутствует ['unread_pm'] (не важно какое значение), затем идут те, у которых этого значения нет.

Всё это в общем смысле отсортировано в глобальном смысле по ['last_date'].

В общем это 5 диалогов с посетителями, в одном из них есть 1 непрочитанное сообщение (его нужно поднять вверх), всё остальное внизу по дате. Вверху диалоги с непрочитанными тоже по дате между собой сортированы.

Это вообще реально?)
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
array_multisort(
    array_column($array, 'unread_pm'), SORT_DESC, 
    array_column($array, 'last_date'), SORT_DESC, 
    $array
);


Если вы делаете выборку из БД то сортировку можно сделать в SQL-запросе
SELECT ... ORDER BY unread_pm DESC, last_date DESC
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
usort + функция, в которой задано отношение больше/меньше/равно для двух элементов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект