55 lines
1.5 KiB
PHP
55 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\BusProNet\DataProcessor;
|
|
|
|
class PickupPlanningTransformer
|
|
{
|
|
/**
|
|
* @param array<int, array<string, mixed>> $payload
|
|
*
|
|
* @return array<string, array<int, array<string, string>>>
|
|
*/
|
|
public function transform(array $payload): array
|
|
{
|
|
$result = [];
|
|
|
|
foreach ($payload as $item) {
|
|
if ('HIN' !== ($item['PlanungsArt'] ?? null)) {
|
|
continue;
|
|
}
|
|
|
|
$travelCodes = $item['Reisecodes'] ?? [];
|
|
|
|
if (0 === count($travelCodes)) {
|
|
continue;
|
|
}
|
|
|
|
$dateTime = \DateTimeImmutable::createFromFormat('d.m.Y H:i', $item['Zeit'] ?? '');
|
|
|
|
foreach ($travelCodes as $code) {
|
|
$pickup = [
|
|
'city' => $item['Zustieg/Ausstieg Ort'] ?? '',
|
|
'location' => $item['Zustieg/Ausstieg Strasse'] ?? '',
|
|
'datetime' => false !== $dateTime ? $dateTime->format('Y-m-d H:i') : '',
|
|
];
|
|
|
|
$key = sprintf('%s|%s|%s', $pickup['city'], $pickup['location'], $pickup['datetime']);
|
|
|
|
if (false === isset($result[$code][$key])) {
|
|
$result[$code][$key] = $pickup;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($result as $code => $pickups) {
|
|
$pickups = array_values($pickups);
|
|
usort($pickups, static fn (array $a, array $b): int => $a['datetime'] <=> $b['datetime']);
|
|
$result[$code] = $pickups;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|