通过嵌套键对数组进行排序,同时保持现有排序不变

时间:2019-04-03 14:38:36

标签: php arrays sorting

我有一组医生,每个医生都有多个键值对

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

我正在运行一个for循环,以在前端显示列表。它们的显示方式是按状态显示的,想象一个以状态为标题的<li>标签,然后列出下面的医生。下一个状态具有另一个<li>,依此类推。目前,只有州按字母顺序列出,但其中的医生姓名却没有。

我想我无法在for循环中对数组进行排序,并且我尝试了其他几种ksortusortasort方法,目的是使索引保持不变。有任何线索吗?

这是一个更离散的示例:

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

简·多伊(Jane Doe)必须先于约翰·多伊(John Doe)。

1 个答案:

答案 0 :(得分:0)

您可以使用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']);
  }
});