Я читаю многомерный массив от JSON. Затем мне нужно сортировать по двум параметрам, примерно на 3 уровня в массиве.Сортировка многомерного массива в PHP с несколькими критериями
Я пробовал 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. Наиболее полезны были Sort multidimensional array by multiple criteria
Sort an associative array in php with multiple condition (источник функции «order_by_date_time»)
Я прочитал PHP руководство по usort на http://www.php.net/manual/en/function.usort.php (и многие другие функции массива сортировки).
Я также подтвердил JSON с JSONLint, поэтому я не думаю, что это проблема, но если это может быть проблемой, я тоже могу ее изменить.
Я знаю, что связанные вопросы были подняты здесь раньше - я читал так много сообщений и пытался так много предложенных ответов. Однако в моем коде есть какая-то часть, которую я просто не вижу.
Strtotime выглядел очень многообещающим, но он все еще ничего не разбирал. Совершенно недоумение. Я использую версию 5.3.3; не может думать о какой-либо причине, что usort будет просто .. не сортировать. – user2208757
@ user2208757 Добавлена ссылка, чтобы показать, что она работает. – Orangepill
Я не знаю, какую магию имеет Скрипача, но она работает. ОНО РАБОТАЕТ!!!!! Очень счастлив. Очень смутно, поскольку я сравниваю два одинаковых набора кода, а один работает, а другой нет ... В конце концов, я найду разницу. Но тем временем, счастливый танец. :) СПАСИБО!! – user2208757