"; echo json_encode(parseCsvToFilteredArray($inputdata)); //Info for Parser Function (the same into the Frontend test2.html is working) $outputdata = '[ { "nr": "33", "nachname": "Musterman", "vorname": "Hans", "email": "Hans.Musterman@kunde.tld", "tage_fehlzeit": [ { "datum": "04.06.2025", "fehlzeitNR1HT": "1", "fehlzeitNR2HT": "1", "fehlzeitName1HT": "Urlaub bez", "fehlzeitName2HT": "Urlaub bez", "tagtypNR": "5", "tagtypName": "Mittwoch" }, { "datum": "05.06.2025", "fehlzeitNR1HT": "1", "fehlzeitNR2HT": "1", "fehlzeitName1HT": "Urlaub bez", "fehlzeitName2HT": "Urlaub bez", "tagtypNR": "6", "tagtypName": "Donnerstag" } ], "tage_feiertage": [ { "datum": "08.06.2025", "fehlzeitNR1HT": "", "fehlzeitNR2HT": "", "fehlzeitName1HT": "", "fehlzeitName2HT": "", "tagtypNR": "48", "tagtypName": "Pfingstsonntag" }, { "datum": "09.06.2025", "fehlzeitNR1HT": "", "fehlzeitNR2HT": "", "fehlzeitName1HT": "", "fehlzeitName2HT": "", "tagtypNR": "49", "tagtypName": "Pfingstmontag" }, { "datum": "01.01.2026", "fehlzeitNR1HT": "", "fehlzeitNR2HT": "", "fehlzeitName1HT": "", "fehlzeitName2HT": "", "tagtypNR": "41", "tagtypName": "Neujahr" } ] } ]'; function parseCsvToFilteredArray(string $csvContent): array { $feiertage = [ 'Neujahr', 'Karfreitag', 'Ostermontag', 'Tag der Arbeit', 'Christi Himmelfahrt', 'Pfingstsonntag', 'Pfingstmontag', 'Fronleichnam', 'Mariä Himmelfahrt', 'Tag der Deutschen Einheit', 'Allerheiligen', '1. Weihnachtstag', '2. Weihnachtstag' ]; $personen = []; $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $csvContent)); foreach ($lines as $line) { $line = trim($line); if ($line === '') continue; $fields = explode(';', $line); if (count($fields) < 11) continue; list( $nr, $nachname, $vorname, $datum, $email, $fehlzeitNR1HT, $fehlzeitNR2HT, $fehlzeitName1HT, $fehlzeitName2HT, $tagtypNR, $tagtypName ) = $fields; $hatFehlzeit = !empty($fehlzeitNR1HT) || !empty($fehlzeitNR2HT); $istFeiertag = in_array($tagtypName, $feiertage); if (!$hatFehlzeit && !$istFeiertag) { continue; // ohne Fehlzeit und kein Feiertag: überspringen } $personKey = "$nr|$nachname|$vorname|$email"; if (!isset($personen[$personKey])) { $personen[$personKey] = [ 'nr' => $nr, 'nachname' => $nachname, 'vorname' => $vorname, 'email' => $email, 'tage_fehlzeit' => [], 'tage_feiertage' => [] ]; } $tagData = [ 'datum' => $datum, 'fehlzeitNR1HT' => $fehlzeitNR1HT, 'fehlzeitNR2HT' => $fehlzeitNR2HT, 'fehlzeitName1HT' => $fehlzeitName1HT, 'fehlzeitName2HT' => $fehlzeitName2HT, 'tagtypNR' => $tagtypNR, 'tagtypName' => $tagtypName ]; if ($hatFehlzeit) { $personen[$personKey]['tage_fehlzeit'][] = $tagData; } if ($istFeiertag) { $personen[$personKey]['tage_feiertage'][] = $tagData; } } // Personen ohne Fehlzeit- und Feiertag-Tage entfernen $personen = array_filter($personen, fn($p) => count($p['tage_fehlzeit']) > 0 || count($p['tage_feiertage']) > 0); uasort($personen, fn($a, $b) => [$a['nachname'], $a['vorname']] <=> [$b['nachname'], $b['vorname']]); return array_values($personen); }