Перебрать массив и удалить данные по датам

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

$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 шт):

Автор решения: web555

Отвлекся на другие задачи, а сегодня вернулся к этой и нашел решение.

  1. Перегоняем даты в unix формат с помощью strtotime теперь у нас по сути набор цифр.
  2. Последовательно вычитаем цифры друг из друга и находим расстояния между ними.
  3. Удаляем самые короткие расстояния.
  4. Циклом повторяем пока не достигнем нужного кол-ва.

Сначала конечно тупил, пытался делить массив пополам высчитывая середину массива, а потом получившиеся массивы опять делил пополам, но это слишком криво получалось.

→ Ссылка