Шаг # 1: Сортируйте ваш массив массивов от минимального к максимальному, используя значения столбца days
.
usort($arr, function($a, $b){ return $a['days'] <=> $b['days'];});
* по совпадению, этого шага можно избежать, поскольку ваши данные уже находятся в подходящем порядке.
Шаг № 2: Использовать столбец массива, чтобы назначить ассоциативные ключи для каждого подмассива.Как правило, массивы не могут содержать повторяющиеся ключи, поэтому более ранние строки перезаписываются (удаляются) более поздними строками - это дает желаемый результат.array_values()
вызывается для удаления временных ключей.
var_export(array_values(array_column($arr, null, 'start_date')));
Код: ( Демо )
$arr = [
['id' => '340', 'days' => '1', 'start_date' => '2018-10-12 00:00:00', 'end_date' => '2018-10-13 00:00:00'],
['id' => '346', 'days' => '2', 'start_date' => '2018-10-12 00:00:00', 'end_date' => '2018-10-14 00:00:00'],
['id' => '339', 'days' => '3', 'start_date' => '2018-10-12 00:00:00', 'end_date' => '2018-10-15 00:00:00'],
['id' => '302', 'days' => '4', 'start_date' => '2018-10-12 00:00:00', 'end_date' => '2018-10-16 00:00:00'],
['id' => '308', 'days' => '5', 'start_date' => '2018-10-12 00:00:00', 'end_date' => '2018-10-17 00:00:00'],
['id' => '354', 'days' => '1', 'start_date' => '2018-10-13 00:00:00', 'end_date' => '2018-10-14 00:00:00'],
['id' => '369', 'days' => '1', 'start_date' => '2018-10-14 00:00:00', 'end_date' => '2018-10-15 00:00:00']
];
usort($arr, function($a, $b){ return $a['days'] <=> $b['days'];});
var_export(array_values(array_column($arr, null, 'start_date')));
Вывод:
array (
0 =>
array (
'id' => '308',
'days' => '5',
'start_date' => '2018-10-12 00:00:00',
'end_date' => '2018-10-17 00:00:00',
),
1 =>
array (
'id' => '354',
'days' => '1',
'start_date' => '2018-10-13 00:00:00',
'end_date' => '2018-10-14 00:00:00',
),
2 =>
array (
'id' => '369',
'days' => '1',
'start_date' => '2018-10-14 00:00:00',
'end_date' => '2018-10-15 00:00:00',
),
)