"; echo json_encode(parseCsvToFilteredArray($data)); 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); }