Сортировка 3-мерного массива на 2-м уровне в зависимости от значений 3-го уровня

Я использую API календаря Google, чтобы извлекать данные из нескольких календарей. Я создаю массив, чтобы я мог форматировать отображение данных. У меня возникли проблемы с сортировкой данных, чтобы события отображались в правильном порядке.

Мой основной вид – это datetime ASC. Если два дня равны, я хочу сортировать по alldayflag DESC. Я хочу, чтобы он отсортировался в течение каждой даты.

Вот пример моих данных:

 Array ( [2016-01-29] => Array ( [0] => Array ( [date] => January 29 [time] => 8:30 am [datetime] => 2016-01-29T08:30:00-06:00 [alldayflag] => 0 ) [1] => Array ( [date] => January 29 [time] => 12:00 am [datetime] => 2016-01-29T00:00:00-06:00 [alldayflag] => 1 ) [2] => Array ( [date] => January 29 [time] => 2:00 pm [datetime] => 2016-01-29T14:00:00-06:00 [alldayflag] => 0 ) [3] => Array ( [date] => January 29 [time] => 10:00 am [datetime] => 2016-01-29T10:00:00-06:00 [alldayflag] => 0 ) [4] => Array ( [date] => January 29 [time] => 12:00 pm [datetime] => 2016-01-29T12:00:00-06:00 [alldayflag] => 0 ) ) [2016-01-30] => Array ( [0] => Array ( [date] => January 30 [time] => 4:00 pm [datetime] => 2016-01-30T16:00:00-06:00 [alldayflag] => 0 ) [1] => Array ( [date] => January 30 [time] => 5:00 pm [datetime] => 2016-01-30T17:00:00-06:00 [alldayflag] => 0 ) [2] => Array ( [date] => January 30 [time] => 11:00 am [datetime] => 2016-01-30T11:00:00-06:00 [alldayflag] => 0 ) ) ) 

Я попытался использовать array_multisort() . Я получаю правильные результаты сортировки, но также получаю сообщение об ошибке:

Предупреждение: array_multisort (): размеры массива непоследовательны в sort-array.php в строке XXX

 $getBeginDate = '2016-01-29'; $getEndDate = '2016-01-31'; $getCurrentDate = $getBeginDate; while(strtotime($getCurrentDate) < strtotime($getEndDate)) { foreach ($list[$getCurrentDate] as $key => $row){ $datetime[$key] = $row['datetime']; $alldayflag[$key] = $row['alldayflag']; } array_multisort($datetime, SORT_ASC, $alldayflag, SORT_DESC, $list[$getCurrentDate]); $getCurrentDate = date('Ym-d', strtotime($getCurrentDate . " +1 day")); } 

Я также пробовал использовать uasort() . Он не сортируется должным образом.

 uasort($list, 'sortCriteria'); function sortCriteria($array, $key) { if(strtotime($a['datetime']) == strtotime($b['datetime'])) { if($a['allday'] < $b['allday']) { return -1; } else { return 0; } } return (strtotime($a['datetime']) < strtotime($b['datetime'])) ? -1 : 1; } 

Любая помощь приветствуется.

Solutions Collecting From Web of "Сортировка 3-мерного массива на 2-м уровне в зависимости от значений 3-го уровня"