Сортировать массив по вложенному ключу, сохранив прежнюю сортировку - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть множество врачей, каждый из которых имеет несколько пар ключ-значение

doctor {
  type: "bla",
  doctor-name: "bla",
  doctor-state-id: "bla",
  doctor-state: "AL",
  ...
}

Я запускаю цикл for для отображения списка на внешнем интерфейсе. То, как они отображаются в зависимости от состояния, представьте тег <li> с указанием состояния в качестве заголовка, а затем врачей, перечисленных ниже. В следующем состоянии есть еще <li> и так далее. В настоящее время в алфавитном порядке перечислены только штаты, а в именах врачей нет.

Я предполагаю, что не могу отсортировать массив в цикле for, и я попробовал несколько других методов ksort, usort и asort с намерением сохранить индексы одинаковыми. Любые подсказки?

вот более дискретный пример:

Alaska
John Doe, MD, PhD - Anchorage - Neurosurgeon
Jane Doe, MD, MBI - Anchorage - Neurosurgeon

Джейн Доу должна прийти раньше, чем Джон Доу.

1 Ответ

0 голосов
/ 03 апреля 2019

Что вы можете использовать uasort() и в функции сравнения вернуть порядок сортировки состояния, но если это то же состояние, вернуть порядок сортировки имени человека.

uasort($array, function($a, $b) {
  if ($a['doctor-state'] == $b['doctor-state']) {
    return strcmp($a['doctor-name'], $b['doctor-name']);
  } else {
    return strcmp($a['doctor-state'], $b['doctor-state']);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...