Перебрать массив и удалить данные по датам
Подскажите пожалуйста. Может у кого будут идеи, а то я даже примерно не могу придумать как это реализовать. У меня есть примерно такой массив:
$arr = [
'1' => ['dt' => '2021-01-01'],
'2' => ['dt' => '2021-02-05'],
'3' => ['dt' => '2021-03-15'],
'4' => ['dt' => '2021-06-07'],
'5' => ['dt' => '2021-09-22'],
'6' => ['dt' => '2021-12-10'],
'7' => ['dt' => '2022-03-05'],
'8' => ['dt' => '2022-04-17'],
'9' => ['dt' => '2022-06-20'],
'10' => ['dt' => '2022-08-01'],
];
Мне нужно оставить 5 элементов массива, но так что бы даты были равномерно распределены по времени. т.е. первая и последняя дата что бы остались, а по середине они более менее равномерно. Четкого интервала между датами нету. Там может быть и несколько месяцев и несколько дней.
как мне вычислить даты которые нужно удалить?
Это статистика ресурса по просмотрам из которой будет строиться граффик. На графике нужно только 5 точек. Примерно равномерные по времени. тут интервал 20 месяцев. 20 / 5 = 4. Средний интервал 4 месяца. В примере оставил бы 1,4,6,8,10.
Ответы (1 шт):
Отвлекся на другие задачи, а сегодня вернулся к этой и нашел решение.
- Перегоняем даты в unix формат с помощью strtotime теперь у нас по сути набор цифр.
- Последовательно вычитаем цифры друг из друга и находим расстояния между ними.
- Удаляем самые короткие расстояния.
- Циклом повторяем пока не достигнем нужного кол-ва.
Сначала конечно тупил, пытался делить массив пополам высчитывая середину массива, а потом получившиеся массивы опять делил пополам, но это слишком криво получалось.