Поиск диапазонов дат PHP

Рейтинг: 1Ответов: 1Опубликовано: 28.12.2014

Есть данные в формате json, которые описывают диапазоны дат - доступен или нет. Т.е. доступно с 2014-12-28T18:50Z по 2014-12-29T11:00Z

[
  {"location": "EYVI", "from": "2014-12-28T18:50Z", "available": true},
  {"location": "EPWA", "from": "2014-12-29T11:00Z", "available": false},
  {"location": "EPWR", "from": "2014-12-29T13:00Z", "available": true},
  {"location": "EYVI", "from": "2014-12-29T14:00Z", "available": false}
]

Нужно их преобразовать в вид:

[
  {"location": "EYVI", "from": "2014-12-28T18:50Z", "to": "2014-12-29T11:00Z"},
  {"location": "EPWR", "from": "2014-12-29T13:00Z", "to": "2014-12-29T14:00Z"},
]

Чтобы данные импортировать в MySQL и производить поиск по диапазону дат.

Пробовал перебирать элементы массива при помощи foreach(), но не могу никак сделать, чтобы правильно все работало. Другими словами - не получается с foreach().

Не могу никак написать этот участок кода, который бы искал в массиве ближайшую дату с пометкой "available": false и когда ее нашел, переходил к поиску другого диапазона.

Ответы

▲ 1

Не надо искать ближайшую дату...

  1. Сортируете исходный массив (по location, потом from). см. usort
  2. Проходите по отсортированному массиву и строите новый.
    • Увидели новый location с available = true, создаете ассоц. массив, соответствующий этому location.
    • Увидели тот же location, но available = false, записываете окончание интервала.
    • и т.д.

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