CSV laden

Erstellt am 17.10.2022 Lesedauer ≤ 1 Min.

Dieses Skript lädt, sortiert und filtert CSV-Dateien.

Das Skript

Stand: 21.10.2022

<?php
function filtern($array, $key, $keyValue) {
   return @array_filter($array, function($value) use ($key, $keyValue) {
     return str_contains(strtolower($value[$key]), strtolower($keyValue)); 
   });
 }
 
function csvdisplay($DateiRelativ,$Ausrichtung,$Suche='',$Suchspalte=0,$Sortierspalte=0,$Absteigend=true,$HatKopf=true,$Ueberschriften='') {
 
 $Datei = $_SERVER["DOCUMENT_ROOT"] . $DateiRelativ;
 
 if (!file_exists($Datei)) {
   $ausgabe = '<p><strong>Keine Datei gefunden.</strong></p>';
 }
 else {
 
   $adr = "csv".rand(100,999);
   $head = $HatKopf;
   $u = PHP_EOL;
 
   $csv = array_map('str_getcsv', file($Datei));
   if (!empty($csv)) {
     if (!$csv) return [];
     if ($HatKopf) {
      $header = $csv[0];
      array_shift($csv);
     }
     if ($Sortierspalte>-1) {
 
      $titles = [];
      foreach ($csv as $row){ 
        $titles[] = $row[$Sortierspalte];
      }
      if ($Absteigend){
         array_multisort($titles, SORT_NATURAL |  SORT_FLAG_CASE, SORT_DESC, $csv);
      } else {
        array_multisort($titles, SORT_NATURAL |  SORT_FLAG_CASE, $csv);
      }
     }
     if ($Suche>''){
     $csv = filtern($csv,$Suchspalte,$Suche);
     }
     if (count($csv)>0) {
      if ($HatKopf) {
        array_unshift($csv,$header);
      }
      $ausgabe = '<style>'.$u;
      $ausgabe .=  '#'.$adr . ' th{text-align:center;font-weight:bold;white-space:pre}'.$u;
      $spalte = strlen($Ausrichtung);
      For ($i=0; $i < $spalte; $i++) {
        $ausgabe .= '#'.$adr . ' td:nth-child('. ($i+1) .'){text-align:';
        switch (substr($Ausrichtung,$i,1)) {
          case "c":
            $ausgabe .='center';
            break;
          case "l":
            $ausgabe .='left';
            break;
          case "r":
            $ausgabe .='right';
            break;
          default:
            $ausgabe .='left';
        }
        $ausgabe .=  ' !important}'.$u;
      }
      $ausgabe .= '</style>'.$u;
      $ausgabe .= '<table ID="' . $adr . '">'. $u;
      If (!$head){
        $Kopf = explode(",",$Ueberschriften);
        $ausgabe .= '<thead><tr>';
        foreach($Kopf as $utext) {
          $ausgabe .= '<th>' . htmlspecialchars($utext) . '</th>'.$u;
        }
        $ausgabe .= '</tr></thead><tbody>'.$u;
      }
      foreach($csv as $key => $element){
        if ($head) {
          $ausgabe .= '<thead><tr>' . $u;
        }
        else {
          $ausgabe .= '<tr>' . $u;
        }
        foreach($element as $subkey => $subelement){
          if ($head) {
            $ausgabe .= '<th>' . htmlspecialchars($subelement) . '</th>' . $u;
          }
          else {
            $ausgabe .= '<td>' . str_replace('|','<br/>',htmlspecialchars($subelement)) . '</td>' . $u;
          }
        }
        if ($head) {
          $ausgabe .= '</tr></thead><tbody>' . $u;
          $head = false;
        }
        else {
          $ausgabe .= '</tr>' . $u;
        }
     }
     $ausgabe .= '</tbody></table>' . $u;
    }
    else {
      $ausgabe ='<p><strong>Keine Einträge.</strong></p>'.$u;
    }
   }
   else {
    $ausgabe = '<p><strong>Keine Daten.</strong></p>'.$u;
   }
}
 Return $ausgabe;
}
?>