Вот небольшой трюк, предполагая, что структура массива / объекта содержит «элементы».
Рабочий пример: https://3v4l.org/Wat8i работает с PHP 5.4 +.
<?php
$datetimes = [
"items" => [
[
"id" => 1,
"start_date" => "2019-09-26",
"start_time" => "07:00:00",
"end_date" => "2019-09-26",
"end_time" => "09:00:00"
],
[
"id" => 4,
"start_date" => "2019-09-26",
"start_time" => "12:00:00",
"end_date" => "2019-09-26",
"end_time" => "14:00:00"
],
[
"id" => 9,
"start_date" => "2019-09-26",
"start_time" => "16:00:00",
"end_date" => "2019-09-26",
"end_time" => "17:00:00"
],
[
"id" => 13,
"start_date" => "2019-09-26",
"start_time" => "19:00:00",
"end_date" => "2019-09-26",
"end_time" => "20:00:00"
],
[
"id" => 2,
"start_date" => "2019-09-27",
"start_time" => "07:00:00",
"end_date" => "2019-09-27",
"end_time" => "08:00:00"
],
[
"id" => 5,
"start_date" => "2019-09-27",
"start_time" => "12:00:00",
"end_date" => "2019-09-27",
"end_time" => "14:00:00"
],
[
"id" => 10,
"start_date" => "2019-09-27",
"start_time" => "16:00:00",
"end_date" => "2019-09-27",
"end_time" => "18:00:00"
],
[
"id" => 14,
"start_date" => "2019-09-27",
"start_time" => "19:00:00",
"end_date" => "2019-09-27",
"end_time" => "20:00:00"
],
[
"id" => 3,
"start_date" => "2019-09-28",
"start_time" => "07:00:00",
"end_date" => "2019-09-28",
"end_time" => "10:00:00"
],
[
"id" => 6,
"start_date" => "2019-09-28",
"start_time" => "12:00:00",
"end_date" => "2019-09-28",
"end_time" => "13:00:00"
],
[
"id" => 11,
"start_date" => "2019-09-28",
"start_time" => "16:00:00",
"end_date" => "2019-09-28",
"end_time" => "17:00:00"
],
[
"id" => 15,
"start_date" => "2019-09-28",
"start_time" => "19:00:00",
"end_date" => "2019-09-28",
"end_time" => "20:00:00"
]
]
];
$openinghours = [];
function openinghours($times) {
global $openinghours;
$openinghours[$times["start_date"]][] = [
"start" => $times["start_time"],
"end" => $times["end_time"]
];
}
array_map("openinghours", $datetimes["items"]);
var_dump($openinghours);
Он в основном создает новый массив без изменения старого и без необходимости в операторах.
[EDIT1]
И быстрая дополнительная функция foreach()
для отображениядаты и время: https://3v4l.org/uhUeS
foreach($openinghours as $date => $times) {
echo "{$date} : {$times[0]["start"]} - " . end($times)["end"] . "\n";
}
[EDIT2]
Если вы ожидаете, что люди или вы сами измените часы работы так, чтобы id
1
может иметь от 07:00:00
до 20:00:00
, я предлагаю вам изменить структуру вывода, чтобы игнорировать start
и end
и просто выбрать первую и последнюю из дат: https://3v4l.org/jMvCP
function openinghours($times) {
global $openinghours;
$openinghours[$times["start_date"]][] = $times["start_time"];
$openinghours[$times["start_date"]][] = $times["end_time"];
sort($openinghours[$times["start_date"]]);
}
array_map("openinghours", $datetimes["items"]);
var_dump($openinghours);
foreach($openinghours as $date => $times) {
echo "{$date} : {$times[0]} - " . end($times) . "\n";
}