Сортировка многомерного массива в PHP с несколькими критериями

Я читаю многомерный массив от JSON. Затем мне нужно сортировать по двум параметрам, примерно на 3 уровня в массиве.

Я пробовал array_multisort, но мог делать только один уровень за раз. Затем я переехал в usort, основываясь на нескольких примерах, которые я видел здесь, на StackOverflow, но он упорно отказывается работать.

JSON:

[ { "multiple parameters": "foobar", "projects": [ { "id": "00101", "date": "9", "time": "14:00", "duration":"30" }, { "id": "EX001", "date": "8", "time": "13:30", "duration":"15" }, { "id": "9A200", "date": "10", "time": "8:45", "duration":"15" }, { "id": "EQ002", "date": "8", "time": "9:30", "duration":"15" } ] } ] 

PHP:

 //read data from the json file $theschedule = '/directory/path/schedule.json'; //read json file if (file_exists ($theschedule)){ $contents = utf8_encode(file_get_contents($theschedule)); $Schedule= json_decode($contents, true); //Sort array usort($Schedule[0]['projects'], 'order_by_date_time'); function order_by_date_time($a, $b) { if ($a['date'] == $b['date']) { // date is the same, sort by time if ($a['time'] == $b['time']) return 0; return $a['time'] == 'y' ? -1 : 1; } // sort the date first: return $a['date'] < $b['date'] ? 1 : -1; } 

На каждой встрече есть дата и время – мне нужно сортировать по дате, а затем время, чтобы заполнить страницу расписания встреч.

Я читал много, много сообщений stackoverflow. Наиболее полезными были сортировка многомерного массива по нескольким критериям

Сортировка ассоциативного массива в php с несколькими условиями (источник функции «order_by_date_time»)

Я прочитал руководство по PHP на usort по адресу http://www.php.net/manual/en/function.usort.php (и многие другие функции сортировки массива).

Я также подтвердил JSON с JSONLint, поэтому я не думаю, что это проблема, но если это может быть проблемой, я тоже могу ее изменить.

Я знаю, что связанные вопросы были подняты здесь раньше – я прочитал так много сообщений и попробовал так много предлагаемых ответов. Однако в моем коде есть какая-то часть, которую я просто не вижу.

Solutions Collecting From Web of "Сортировка многомерного массива в PHP с несколькими критериями"

Это должно сработать для вас.

  function order_by_date_time($a, $b){ if ($a["date"] == $b["date"]){ return strtotime($a["time"]) - strtotime($b["time"]); } return $a["date"] - $b["date"]; } usort ($Schedule[0]['projects'], "order_by_date_time"); 

См. Рабочий скрипт

Как насчет переходов по всем встречам и добавления дополнительного поля date_time которое является сортируемой комбинацией обоих полей. Тогда вам нужно будет только отсортировать его.