Zahlen und Diagramme zur Corona-Pandemie

Datum der Quelldatei:
25.05.2022
Deutschland Frankreich Großbritanien EU USA Nordamerika Weltweit Alle Länder



A Zusammenfassung
B Verlauf
Tabelle Diagramme
letzte 4 Wochen letzte 8 Wochen Gesamt Wochensummen Monatssummen
Länder-Vergleich
Auswahl Europa Nordamerika Afrika Asien Ozeanien Süd Amerika
Kontinente-Vergleich
C Verteilung Diagramme Tabelle
D Heatmaps Trend Infektionen Todesfälle
E Dokumentation Dokumentation

Die Datenquelle

Die Rohdaten stammen von
https://ourworldindata.org/

Die Datenbank kann unter
https://ourworldindata.org/coronavirus-data
abgerufen werden


Der Quelltext

includes/header.php
layout.css
verteilung_tabellen.js
index.php
zusammenfassung.php
verteilung_tabellen.php
verteilung_diagramme.php
includes/zeitreihe_gesamtinfektionen.php
includes/zeitreihe_neuinfektionen_gesamt.php
zeitreihen_tabellen.php
zeitreihen_diagramme.php
zeitreihen_diagramme2.php
zeitreihen_diagramme3.php
zeitreihen_diagramme_wochensumme.php
zeitreihen_diagramme_monatssumme.php
zeitreihen_diagramme_vergleich.php
heatmap.php
heatmap3.php
includes/download.php
includes/datenbank_erweitern.php
includes/datenbank_reduzieren.php
dokumentation.php
includes/footer.php

includes/header.php

<?php

#Schalter für Debugging
$debug = False;

# interne Seitenverweise mit Cross-Site-Scripting Protection
$seitenverweis = htmlspecialchars(substr($_GET['vseite'], 0, 40), ENT_QUOTES );
$laenderverweis = htmlspecialchars(substr($_GET['vland'], 0, 10), ENT_QUOTES );

if ( $seitenverweis == "" ){ $seitenverweis = "zusammenfassung"; }
if ( $laenderverweis == "" ){ $laenderverweis = "DEU"; }

# Deutsche Zeichentabelle verwenden (z.B. für Sortierungen)
setlocale (LC_COLLATE, "deu_deu", "de_DE" );

$faktor_tote = 25;

if ($debug) { $memory["start"] = round(memory_get_usage() / 1024, 0) ; }

 # Datenbank corona_daten.csv einlesen
$input = file("corona_daten.csv");

# filtert auf das aktuelle Land (als ISO-Code)
function filter_land(){
 global $land_akt;
 global $input;

 $n_array = [];

 # Für jeden Eintrag von $input (= jede Zeile)
 for ( $x = 0; $x <= count($input); $x++ ){

  # Zeile in ein Array aufspalten und in $array speichern
  $array = explode(",", $input[$x]);

  # wenn die ISO-Codes übereinstimmen
  if ($array[0] == $land_akt){

   # Zeile an n_array anhängen
   $n_array[] = $array;
  }
 }

 return $n_array;
}

function filter_region(){
 global $testregion;
 global $input;

 $n_array = [];

 # Für jeden Eintrag von $input (= jede Zeile)
 for ( $x = 0; $x <= count($input); $x++ ){

  # Zeile in ein Array aufspalten und in $array speichern
  $array = explode(",", $input[$x]);
  if ($array[1] == $testregion){
   $n_array[] = $array;
  }
 }

 return $n_array;
}

# testet auf das heutige Datum
function filter_datum(){
 global $datumakt;
 global $input;

 $n_array = [];

 # Für jeden Eintrag von $input (= jede Zeile)
 for ( $x = 0; $x <= count($input); $x++ ){

  # Zeile in ein Array aufspalten und in $array speichern
  $array = explode(",", $input[$x]);
  if ($array[3] == $datumakt){
   $n_array[] = $array;
  }
 }

 return $n_array;
}

# filtert die Datensätze der letzten X Tage (vor aktuellem Datum der DB)
function filter_datum_land($tage){
 global $offset_datum;
 global $land_akt;
 global $input;

 $n_array = [];

 # Für jeden Eintrag von $input (= jede Zeile)
 for ( $x = 0; $x <= count($input); $x++ ){

  # Zeile in ein Array aufspalten und in $array speichern
  $array = explode(",", $input[$x]);

  if ( strtotime($array[3]) > strtotime("-" . ($tage + 2 - $offset_datum) . " Days") &&
       strtotime($array[3]) < strtotime("-" . (2 - $offset_datum) . " Days") &&
     ( $array[0] == $land_akt ) ){
   $n_array[] = $array;
  }
 }

 return $n_array;
}


function werte_berechnen($data){
 global $faelle_tmp;
 global $tote_tmp;

 $diff_faelle = round($data[42] - $faelle_tmp, 3);
 $diff_tote = round($data[48] - $tote_tmp, 3);

 $diff_faelle_rel = round($diff_faelle / $faelle_tmp * 100, 3);
 $diff_tote_rel = round($diff_tote / $tote_tmp * 100, 3);

 $faelle_tmp = $data[42];
 $tote_tmp = $data[48];

 $ausgabe = array ($data[3],$diff_faelle,$diff_tote,$diff_faelle_rel,$diff_tote_rel,$data[9]);

 return $ausgabe;
}

function fehler_auf_null($data){
 if (is_nan($data[3])) { $data[3] = 0;}
 if (is_nan($data[4])) { $data[4] = 0;}

 if (is_infinite($data[3])) { $data[3] = 0;}
 if (is_infinite($data[4])) { $data[4] = 0;}

 return array ($data[0],
		 	   $data[1],
			   $data[2],
			   $data[3],
			   $data[4],
			   $data[5]);
}

# Wenn der Wochentag 1 ist (Montag)
function filter_montag(){
 global $land_akt;
 global $input;

 $n_array = [];

 # Für jeden Eintrag von $input (= jede Zeile)
 for ( $x = 0; $x <= count($input); $x++ ){

  # Zeile in ein Array aufspalten und in $array speichern
  $array = explode(",", $input[$x]);
  if ( date("N", strtotime($array[3])) == "1" &&
     ($array[0] == $land_akt) ){
   $n_array[] = $array;
  }
 }

 return $n_array;
}

# wenn der Tag des Monats gleich "1" ist (1. Tag des Monats)
function filter_monat(){
 global $land_akt;
 global $input;

 $n_array = [];

 # Für jeden Eintrag von $input (= jede Zeile)
 for ( $x = 0; $x <= count($input); $x++ ){

  # Zeile in ein Array aufspalten und in $array speichern
  $array = explode(",", $input[$x]);
  if ( ( date("j", strtotime($array[3])) == "28" ) &&
       ($array[0] == $land_akt) ){
   $n_array[] = $array;
  }
 }

 return $n_array;
}

if ($debug) { $memory["input"] = round(memory_get_usage() / 1024, 0) ; }

# Auf aktuelle Daten prüfen
include ("./includes/download.php");

if ($debug) { $memory["nach_dl"] = round(memory_get_usage() / 1024, 0) ; }

if (date("H") < 21){

$datumakt = date("Y-m-d", strtotime("-2 Days"));
$datumakt_gestern = date("Y-m-d", strtotime("-3 Days"));
$offset_datum = 0;

} else {

$datumakt = date("Y-m-d", strtotime("-1 Day"));
$datumakt_gestern = date("Y-m-d", strtotime("-2 Days"));
$offset_datum = 1;

}

if ($debug) { $memory["timezone"] = date_default_timezone_get() ; }

// Länder-Übersetzungs-Arrays

# Tabelle mit Ländernamen und ISO-Codes einlesen
$input_laender = file("laender_iso_en_de_region.csv");

# Liste in ein Array einlesen
for ( $x = 0 ; $x <= count($input_laender); $x++ ){ $array_laender[] = explode(",", $input_laender[$x] ); } 

# Assoziative Arrays erzeugen
foreach ($array_laender as $land) { $liste_laender_en_de["$land[1]"] = $land[2]; } # Englisch -> Deutsch
foreach ($array_laender as $land) { $liste_laender_iso_de["$land[0]"] = $land[2]; } # ISO -> Deutsch
foreach ($array_laender as $land) { $liste_laender_iso_en["$land[0]"] = $land[1]; } # ISO -> Englisch

# Speicher freigeben
unset($input_laender);

if ($debug) { $memory["laender"] = round(memory_get_usage() / 1024, 0) ; }

?>


<!--<!DOCTYPE html>  stört SVG->Text-Size  -->
<html lang="de-DE">

<head>
	<title>Zahlen und Diagramme zur Corona-Pandemie</title>
	<meta charset='UTF-8'>
    <link href='https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap' rel='stylesheet'>
    <link href='https://fonts.googleapis.com/css2?family=Indie+Flower&display=swap' rel='stylesheet'>
    <link rel='stylesheet' href='layout.css' type='text/css'>
    <script type = "text/javascript" src="verteilung_tabellen.js"></script>  
</head>

<body style="background-image: linear-gradient(15deg, #D3FFFF, #C7EEEE);">
 <center><h1><a href="index.php">Zahlen und Diagramme zur Corona-Pandemie</a></h1></center>


<!-- Das Grundgerüst -->
 <table border='0' width='1600'>
  <tr>
   <td class='Q1' width='180' height='60'>Datum der <a href="https://ourworldindata.org/coronavirus-data" target="_blank">Quelldatei</a>:</br><?=date("d.m.Y",strtotime($datumakt))?></td>
   <td class='Q2'>

     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=DEU&vseite=<?=$seitenverweis?>">Deutschland</a>
     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=FRA&vseite=<?=$seitenverweis?>">Frankreich</a>
     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=GBR&vseite=<?=$seitenverweis?>">Großbritanien</a>
     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=OWID_EUN&vseite=<?=$seitenverweis?>">EU</a>
     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=USA&vseite=<?=$seitenverweis?>">USA</a>
     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=OWID_NAM&vseite=<?=$seitenverweis?>">Nordamerika</a>
     <a class="menu_top" href="<?=$seitenverweis?>.php?vland=OWID_WRL&vseite=<?=$seitenverweis?>">Weltweit</a>

	
    <span width='100px' onclick='document.getElementById("menu_laender").style.visibility="visible";' class='link'>Alle L&auml;nder</span>
    <div id='mnu'>
    <div id='menu_laender' onmouseover='document.getElementById("menu_laender").style.visibility="visible";' onmouseout='document.getElementById("menu_laender").style.visibility="hidden";'>
      <?
       asort($liste_laender_iso_de, SORT_LOCALE_STRING);
       foreach ($liste_laender_iso_de as $label1 => $label2) {
        if ($label2 != "") {
         echo "<a class='menu_eintraege' href='" . $seitenverweis . ".php?vland=" . $label1 . "&vseite=" . $seitenverweis . "'>" . $label2 . "</a>\n";
        }
       }
      ?>
    </div>
    </div>

   </td>
  </tr>
  <tr>
   <td class='Q3'><br></br>
    <br><a class='menu_left' href="zusammenfassung.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung">A Zusammenfassung</a></br>
    B Verlauf<br>
    <a class='menu_left' href="zeitreihen_tabellen.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_tabellen">Tabelle</a>
    Diagramme<br>
    <a class='menu_left' href="zeitreihen_diagramme_4wochen.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_diagramme_4wochen">letzte 4 Wochen</a>
    <a class='menu_left' href="zeitreihen_diagramme_8wochen.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_diagramme_8wochen">letzte 8 Wochen</a>
    <a class='menu_left' href="zeitreihen_diagramme.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_diagramme">Gesamt</a>
    <a class='menu_left' href="zeitreihen_diagramme_wochensumme.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_diagramme_wochensumme">Wochensummen</a>
    <a class='menu_left' href="zeitreihen_diagramme_monatssumme.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_diagramme_monatssumme">Monatssummen</a>
    <br>
    L&auml;nder-Vergleich<br>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=0">Auswahl</a>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=2">Europa</a>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=3">Nordamerika</a>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=4">Afrika</a>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=5">Asien</a>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=6">Ozeanien</a>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=7">S&uuml;d Amerika</a>
    <br>
    <a class='menu_left' href="zeitreihen_diagramme_vergleich.php?vland=<?=$laenderverweis?>&vseite=zusammenfassung&vvis=1">Kontinente-Vergleich</a>
    <br>C Verteilung
    <a class="menu_left" href="verteilung_diagramme.php?vland=<?=$laenderverweis?>&vseite=verteilung_diagramme">Diagramme</a>
    <a class="menu_left" href="verteilung_tabellen.php?vland=<?=$laenderverweis?>&vseite=verteilung_tabellen">Tabelle</a>
    <br>D Heatmaps
    <a class="menu_left" href="heatmap.php?vland=<?=$laenderverweis?>&vseite=heatmap&vvis=4">Trend</a>

    <a class="menu_left" href="heatmap.php?vland=<?=$laenderverweis?>&vseite=heatmap&vvis=1">Infektionen</a>
    <a class="menu_left" href="heatmap.php?vland=<?=$laenderverweis?>&vseite=heatmap&vvis=2">Todesf&auml;lle</a>
<!--    <a class="menu_left" href="heatmap3.php?vland=<?=$laenderverweis?>&vseite=heatmap3">Trend + Infektionen</a>
    <a class="menu_left" href="heatmap4.php?vland=<?=$laenderverweis?>&vseite=heatmap&vvis=4">Trend kurz</a> -->
    </br>E Dokumentation
    <a class='menu_left' href="dokumentation.php">Dokumentation</a>
   </td>
   <td class='inhalt'>

<!-- Der Inhaltsteil -->

layout.css

th {
    position: sticky;
    top: 0;
    background-color: #D3FFFF;
    text-align:center;
}

body {
    font-family: 'Share Tech Mono';
    background-color: #D3FFFF;
    }

.hmt {
    font-size:8px;
    color:#FFFFFF;
}

pre {
    text-align: left;
}

[class*="tote"] {
    color: #DD0000;
 /*   background-color: #FFDDDDEE; */
    background-image: linear-gradient(45deg, #FFC05A, #FFDDDDEE);

}

[class*="faelle"] {
    color: #000088;
    background-image: linear-gradient(45deg, #7799FFEE, #D3FFFFEE);
}

[class*="tab"] {
    padding: 8px;
}

[class*="impf"] {
    color: #00AA00;
    background-image: linear-gradient(45deg, #CCFFDDEE, #D3FFFFEE);
}

[class*="bev"] {
    color: #000000;
    background-image: linear-gradient(45deg, #CCFFDDEE, #D3FFFFEE);
}

td {
    text-align:right;
}

h1 {}

h2 {
    font-size: 20;
}

h3 {
    font-size: 16;
}

a {
    text-decoration: none;
    border: 0px solid black;
    padding: 4px;
    }
a:hover {
    background: #222222;
    color: #ffffff;
    }

.inhalt {
    text-align: left;
    padding: 20px;
    }

.Q1 {
    font-size: 80%;
    }

.Q2 {
    vertical-align:middle;
    text-align:left;
    }

.Q3 {
    vertical-align:top;
    }

.menu_left {
    display: block;
    }

#menu_laender {
    column-count:5;
/*    width:800px; */
    position:absolute;
    background-color: #D3FFFF;
    visibility:hidden;
    border:3px solid green;
    border-radius:20px;
    z-index:1;
    margin:5px;
    padding:10px;
    transition-duration: 0.4s;
}

a.menu_eintraege {
    color:#FFFFFF;
    text-align:center;
    font-size:90%;
    font-weight:bold;
    display:block;
    width:160px;
    padding:6px;
    border: 2px solid #D3FFFF;
    outline: 1px solid #000000;
    border-radius:5px;
    background:#000077;
    margin:2px 0 0 0;
}

a.menu_eintraege:hover {
    border: 2px solid red;
    color: yellow;
  transition-duration: 0.3s;
}

a.menu_eintraege:active {
    border: 2px solid red;
    color: yellow;
    background:#000000;
}

/* Zusammenfassung.php */

#zusammenfassung th, #zusammenfassung td {
    text-align:center;
    padding: 12px;
    border-radius:10px;

    border-collapse: separate;
    border-spacing: 15px;
    
     /* box-shadow: 2px 2px 3px 2px #000000; */
}
.klein {
    font-size: 80%;
}

.gross {
    font-size: 120%;
}

/* Heatmap */

.h_d {
	
	writing-mode: vertical-rl;
	text-orientation: mixed;
}

.tt_neutr {
    background-color: #FFFF00EE;
	font-size: 20%;
}

.tt_pos {
    background-color: #FF0000EE;
    font-size: 20%;
}

.tt_pos2 {
    background-color: #990000EE;
    font-size: 20%;
}


.tt_neg {
    background-color: #00FF00EE;
	font-size: 20%;
}

.tt_neg2 {
    background-color: #009900EE;
	font-size: 20%;
}

/* Zeitreihen_Tabellen, Verteilung_Tabellen */

/* es wird jede zweite (gerade) Zeile eingefärbt, wenn sie sich in einem tbody-Element befindet */
tbody > tr.zeilen:nth-child(odd) {
    background-color: #000000;
}

/*Die Sortierknöpfe*/
th > span {
    font-size: 150%;
}

th > span:hover {
    color: white;
    background-color: black;
}

.link{
    padding: 4px;
}

.link:hover{
    color: white;
    background-color: black;
}

/*markierte Zeile, die hervorgehoben werden soll*/
[class*="xxx"] {
    color: #000000;
    text-align: right;
    font-weight: bold;
}

.tab_land {
    background-color: #D3FFFFEE;
}

.tab_land_xxx {
    background-color: #FFAAAAEE;
}

.tab_datum {
    background-color: #D3FFFFEE;
}


[class*="trend"] {
    text-align:center;
    color: #000000;
    font-weight: bold;
}

.tab_trend_pos {
    background-color: #FF0000EE;
}

.tab_trend_neg {
    background-color: #00FF00EE;
}

.tab_trend_neutr {
    background-color: #FFFF00EE;
}

.datum3 {
    font-size: 70%;
}

/* Zeitreihen_Diagramme */

text {
    fill:#000000;
}

line {
    stroke:#000000;
}

#legende1 text {
    font-size: 14px;
}


#legende1 .gd {
    font-size: 75%;
    stroke-width:3;
}


#legende2 text {
    font-size: 14px;
}

#legende2 .legende, #legende1 .legende {
    font-size: 16px;
}

.l_f {
    stroke:#6666FF;
    stroke-width:1;
}

.l_t {
    stroke:#FF6666;
    stroke-width:1;
}

.l_i {
    stroke:#22AA22;
    stroke-width:1;
}
.l_gen{
    stroke:#FF6600;
}

.l_gf {
    stroke:#000088;
    stroke-width:3;
}

.l_gt {
    stroke:#770000;
    stroke-width:3;
}
.l_gi {
    stroke:#007700;
    stroke-width:3;
}

verteilung_tabellen.js

function tabelle_sortieren_a(n,m){
 var tabelle, reihen, getauscht, i, x, y, tauschen, k;

//k = m + 1;


if ( m == 2 ) {
 k = 3;
} else {
 k = 1;
}


 tabelle = document.getElementById("verteilung" + m);
 getauscht = true;

 while (getauscht) {
  getauscht = false;
  reihen = tabelle.rows;


  for (i = 2; i < (reihen.length - k); i++) {       //es ist wichtig bei 2 zu starten!! ( header hat zwei zeilen!)
   tauschen = false;


if ( n == 0 ) {

   x = reihen[i].getElementsByTagName("a")[n];
   y = reihen[i + 1].getElementsByTagName("a")[n];

   x = x.innerHTML.toLowerCase();
   y = y.innerHTML.toLowerCase();

}

if ( n == 1 ) {

   x = reihen[i].getElementsByTagName("td")[n];
   y = reihen[i + 1].getElementsByTagName("td")[n];

   x = x.innerHTML.toLowerCase();
   y = y.innerHTML.toLowerCase();

}

if ( n > 1 ) {

   x = reihen[i].getElementsByTagName("td")[n];
   y = reihen[i + 1].getElementsByTagName("td")[n];

   x = x.innerHTML.toLowerCase();
   y = y.innerHTML.toLowerCase();

   //Punkte entfernen, damit die Werte als Zahlen behandelt werden
   x = x.replace(".","");   x = x.replace(".","");   x = x.replace(".","");
   y = y.replace(".","");   y = y.replace(".","");   y = y.replace(".","");

   //Komma durch Punkte ersetzen, damit Nachkommastellen richtig erkannt werden
   x = x.replace(",",".");
   y = y.replace(",",".");

   x = parseFloat(x);
   y = parseFloat(y);

}

   if (x > y) {
    tauschen = true;
    break;
   }
  }

 if (tauschen) {
   reihen[i].parentNode.insertBefore(reihen[i + 1], reihen[i]);
   getauscht = true;

  }
 }
}

function tabelle_sortieren_d(n,m){
 var tabelle, reihen, getauscht, i, x, y, tauschen, k;

if ( m == 2 ) {
 k = 3;
} else {
 k = 1;
}
 tabelle = document.getElementById("verteilung" + m);
 getauscht = true;

 while (getauscht) {
  getauscht = false;
  reihen = tabelle.rows;

  for (i = 2; i < (reihen.length - k); i++) {       //es ist wichtig bei 2 zu starten!! ( header hat zwei zeilen!)
   tauschen = false;

if ( n == 0 ) {

   x = reihen[i].getElementsByTagName("a")[n];
   y = reihen[i + 1].getElementsByTagName("a")[n];

   x = x.innerHTML.toLowerCase();
   y = y.innerHTML.toLowerCase();

}

if ( n == 1 ) {

   x = reihen[i].getElementsByTagName("td")[n];
   y = reihen[i + 1].getElementsByTagName("td")[n];

   x = x.innerHTML.toLowerCase();
   y = y.innerHTML.toLowerCase();

}

if ( n > 1 ) {

   x = reihen[i].getElementsByTagName("td")[n];
   y = reihen[i + 1].getElementsByTagName("td")[n];

   x = x.innerHTML.toLowerCase();
   y = y.innerHTML.toLowerCase();

   x = x.replace(".","");   x = x.replace(".","");   x = x.replace(".","");
   y = y.replace(".","");   y = y.replace(".","");   y = y.replace(".","");

   x = x.replace(",",".");
   y = y.replace(",",".");

   x = parseFloat(x);
   y = parseFloat(y);

}

   if (x < y) {
    tauschen = true;
    break;
   }
  }

 if (tauschen) {
   reihen[i].parentNode.insertBefore(reihen[i + 1], reihen[i]);
   getauscht = true;

  }
 }
}

index.php

<?php

// CC-BY Andreas Schult
// 100 % handcoded

include ("./includes/header.php");                          # Kopfteil einbinden

?>

<p style="font-size: 250%; font-family: 'Indie Flower';">   <!-- Begrüßungstext-->
Willkommen bei den Corona-Statistiken</br>
von Andreas Schult</br></br>
100% Free & Open Source</p>

<?php

include ("./includes/footer.php");                          # Fußteil einbinden

?>

zusammenfassung.php

<?php

include ("./includes/header.php");

// der Inhalt

echo "<h3>aktuelle Zusammenfassung und Auswertungen</h3>\n";
#      <p><a href='zusammenfassung_gestern.php?vland=$laenderverweis&vseite=zusammenfassung_gestern'>Einen Tag zurück</a></p>\n";

$input = file("corona_daten.csv");

# Für jeden Eintrag von $input (= jede Zeile)
for ( $x = 0; $x <= count($input); $x++ ){
 # Zeile in ein Array aufspalten und in $array speichern
 $array = explode(",", $input[$x]);

 # wenn der Länderverweis und das Datum übereinstimmen
 if ($array[0] == $laenderverweis && $array[3] == $datumakt ){ $n_array = $array; }
}

unset($input);

echo "<table id='zusammenfassung' border='0'>
<tr>
 <th>" . $n_array[25] . "</th>
 <th class='faelle'>Fälle</th>
 <th class='faelle'>je Million EW</th>
 <th class='tote'>Tote</th>
 <th class='tote'>je Million EW</th>
</tr>
<!--<tr>
 <td>aktuell</br><div class='klein'>(" . date("d.m.Y",strtotime($datumakt)) . ")</div></td>
 <td class='faelle'><div class='gross'>" . number_format(intval($n_array[5]), 0, ",", ".") . "</div></td>
 <td class='faelle'><div class='gross'>" . intval($n_array[9]) . "</div></td>
 <td class='tote'><div class='gross'>" . number_format(intval($n_array[7]), 0, ",", ".") . "</div></td>
 <td class='tote'><div class='gross'>" . number_format(floatval($n_array[11]), 2, ",", ".") . "</div></td>
</tr>-->
<tr>
 <td>letzte 7 Tage</td>
 <td class='faelle'>" . number_format($n_array[26], 0, ",", ".") . "<div class='klein'>" . number_format($n_array[29], 0, ",", ".") . " / Tag</div></td>
 <td class='faelle'>" . number_format($n_array[38], 0, ",", ".") . "<div class='klein'>" . number_format($n_array[41], 0, ",", ".") . " / Tag</div></td>
 <td class='tote'>" . number_format($n_array[32], 0, ",", ".") . "<div class='klein'>" . number_format($n_array[35], 0, ",", ".") . " / Tag</div></td>
 <td class='tote'>" . number_format($n_array[44], 1, ",", ".") . "<div class='klein'>" . number_format($n_array[47], 1, ",", ".") . " / Tag</div></td>
</tr>

<tr>
 <td>vorherige 7 Tage</td>
 <td class='faelle'>" . number_format($n_array[27]-$n_array[26], 0, ",", ".") . "<div class='klein'>" . number_format(($n_array[27] - $n_array[26]) / 7, 0, ",", ".") . " / Tag</div></td>
 <td class='faelle'>" . number_format($n_array[39]-$n_array[38], 0, ",", ".") . "<div class='klein'>" . number_format(($n_array[39] - $n_array[38]) / 7, 0, ",", ".") . " / Tag</div></td>
 <td class='tote'>" . number_format($n_array[33]-$n_array[32], 0, ",", ".") . "<div class='klein'>" . number_format(($n_array[33] - $n_array[32]) / 7, 0, ",", ".") . " / Tag</div></td>
 <td class='tote'>" . number_format($n_array[45]-$n_array[44], 1, ",", ".") . "<div class='klein'>" . number_format(($n_array[45] - $n_array[44]) / 7, 1, ",", ".") . " / Tag</div></td>
</tr>
 
<tr>
 <td>7-Tage-Inzidenz</td>
 <td colspan='4' class='faelle'>" . number_format($n_array[38]/10, 0, ",", ".") . "<div class='klein'>je 100.000 Einwohner</div></td>
</tr>
<tr>
 <td>Veränderung zur Vorwoche</td>
 <td class='faelle' colspan='2'>" ;
  
if( ( $n_array[27] - 2 * $n_array[26] ) / $n_array[26] < 0 ){ echo "+"; }

 echo number_format( ( $n_array[27] - 2 * $n_array[26]) / ($n_array[27] - $n_array[26] ) * -100, 2, ",", ".");
   
 echo " %</td>
  <td class='tote' colspan='2'>";
   
 if( ( $n_array[33] - 2 * $n_array[32] ) / $n_array[33] < 0){ echo "+"; }

 echo number_format( ( $n_array[33] - 2 * $n_array[32] ) / ($n_array[33] - $n_array[32]) * -100, 2, ",", ".");

echo " %</td>
 </tr>
 <tr>
  <td>letzte 2 Wochen</td>
  <td class='faelle'>" . number_format($n_array[27], 0, ",", ".") . "</br><div class='klein'>" . number_format($n_array[30], 0, ",", ".") . " / Tag</div></td>
  <td class='faelle'>" . number_format($n_array[39], 0, ",", ".") . "</br><div class='klein'>" . number_format($n_array[42], 0, ",", ".") . " / Tag</div></td>
  <td class='tote'>" . number_format($n_array[33], 0, ",", ".") . "</br><div class='klein'>" . number_format($n_array[36], 0, ",", ".") . " / Tag</div></td>
  <td class='tote'>" . number_format($n_array[45], 1, ",", ".") . "</br><div class='klein'>" . number_format($n_array[48], 1, ",", ".") . " / Tag</div></td>
 </tr>
 <tr>
  <td>letzte 4 Wochen</td>
  <td class='faelle'>" . number_format($n_array[28], 0, ",", ".") . "</br><div class='klein'>" . number_format($n_array[31], 0, ",", ".") . " / Tag</div></td>
  <td class='faelle'>" . number_format($n_array[40], 0, ",", ".") . "</br><div class='klein'>" . number_format($n_array[43], 0, ",", ".") . " / Tag</div></td>
  <td class='tote'>" . number_format($n_array[34], 0, ",", ".") . "</br><div class='klein'>" . number_format($n_array[37], 0, ",", ".") . " / Tag</div></td>
  <td class='tote'>" . number_format($n_array[46], 1, ",", ".") . "</br><div class='klein'>" . number_format($n_array[49], 1, ",", ".") . " / Tag</div></td>
 </tr>
 <tr>
  <td>Seit Beginn</td>
  <td class='faelle'>" . number_format(intval($n_array[4]), 0, ",", ".") . "</td>
  <td class='faelle'>" . number_format(floatval($n_array[8]), 0, ",", ".") . "</br><div class='klein'>(" . number_format(floatval($n_array[8])/10000, 2, ",", ".") . " %) </div></td>
  <td class='tote'>" . number_format(intval($n_array[6]), 0, ",", ".") . "</td>
  <td class='tote'>" . number_format(floatval($n_array[10]), 1, ",", ".") . "</br><div class='klein'>(" . number_format(floatval($n_array[10])/10000, 2, ",", ".") . " %)</div></td>
 </tr>
 <tr>
 <td>Sterblichkeit*</td>
 <td colspan='4' class='tote'>" . number_format(intval($n_array[6])/(intval($n_array[54])*intval($n_array[23])/1000000), 4, ",", ".") . " Tote / Fall = " . number_format((intval($n_array[6])/(intval($n_array[54])*intval($n_array[23])/1000000))*100, 1, ",", ".")  . " %</td>
 </tr>
 <tr>
  <td>Impfquote</td>
  <td colspan='4' class='impf'>1. Impfung: " . number_format(floatval($n_array[21]), 2, ",", ".") . " % - 2. Impfung: " . number_format(floatval($n_array[22]), 2, ",", ".") . " %</td>
 </tr>
 <tr>
 <td>Bevölkerung</td>
 <td colspan='4' class='bev'>" . number_format(floatval($n_array[23]), 0, ",", ".") . " (" . intval($n_array[24]) . " Einw / km²)</td>
 </tr>
</table>
<p>* = Die Sterblichkeit bezieht sich auf die Gesamtinfektionen vor 2 Wochen</p>";


// der Fußteil

include ("./includes/footer.php");

?>

verteilung_tabellen.php

<?php

include ("./includes/header.php");

$land_akt = $laenderverweis;

$grenzwert = 0.1;

$neues_array = filter_datum();

foreach($neues_array as $arrr) { $sortierspalte[] = $arrr[25]; }
array_multisort($sortierspalte, SORT_ASC, SORT_LOCALE_STRING, $neues_array);

// der Inhalt

echo "<h2>Verteilung der Infektionsfälle und Todesfälle über alle Länder für den " . date("d.m.Y", strtotime($datumakt)) . "</h2>\n";

// Verteilungstabelle

// Regionen

echo "<h2>nach Regionen</h2>\n";

echo "<table id='verteilung2'>
       <thead>
         <tr>
         <th></th>
         <th>Trend</th>
         <th class='tab_faelle' colspan='4'>Infektionen</th>
         <th class='tab_tote' colspan='4'>Todesfälle</th>
         <th class='tab_tote'></th>
         <th class='tab_impf' colspan='2'>Impfquote %</th>
        </tr>
        <tr>
         <th class='tab_land'>Land<span onclick='tabelle_sortieren_a(0,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(0,2)'>&darr;</span></th>
         <th>28 Tage</th>
         <th class='tab_faelle'>Neu*<span onclick='tabelle_sortieren_a(2,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(2,2)'>&darr;</span></th>
         <th class='tab_faelle'>je Million*<span onclick='tabelle_sortieren_a(3,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(3,2)'>&darr;</span></th>
         <th class='tab_faelle'>Gesamt<span onclick='tabelle_sortieren_a(4,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(4,2)'>&darr;</span></th>
         <th class='tab_faelle'>je Million<span onclick='tabelle_sortieren_a(5,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(5,2)'>&darr;</span></th>
         <th class='tab_tote'>Neu*<span onclick='tabelle_sortieren_a(6,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(6,2)'>&darr;</span></th>
         <th class='tab_tote'>je Million*<span onclick='tabelle_sortieren_a(7,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(7,2)'>&darr;</span></th>
         <th class='tab_tote'>Gesamt<span onclick='tabelle_sortieren_a(8,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(8,2)'>&darr;</span></th>
         <th class='tab_tote'>je Million<span onclick='tabelle_sortieren_a(9,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(9,2)'>&darr;</span></th>
         <th class='tab_tote'>Sterblichkeit<span onclick='tabelle_sortieren_a(10,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(10,2)'>&darr;</span></th>
         <th class='tab_impf'>1. Impfung<span onclick='tabelle_sortieren_a(11,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(11,2)'>&darr;</span></th>
         <th class='tab_impf'>vollständig<span onclick='tabelle_sortieren_a(12,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(12,2)'>&darr;</span></th>
         <th class='tab_bev'>Bevölkerung<span onclick='tabelle_sortieren_a(13,2)'>&uarr;</span><span onclick='tabelle_sortieren_d(13,2)'>&darr;</span></th>
        </tr>
       </thead>
       <tbody>\n";
       
foreach ($neues_array as $datensatz) {
 if ( preg_match("/OWID/i", $datensatz[0]) == 1 && 
      preg_match("/OWID_(WRL|EUN)/i", $datensatz[0]) != 1 && 
      preg_match("/Kosovo/i", $datensatz[2]) != 1 && 
      preg_match("/OWID_(INT|CYN|HIC|LIC|LMC|UMC)/i", $datensatz[0]) != 1 && 
      $datensatz[2] != ""){
  if ( -floatval($datensatz[52]) > $grenzwert ) { $klasse2 = 'pos'; $pfeil = '&#8599;'; } elseif ( -floatval($datensatz[52]) < -$grenzwert ) { $klasse2 = 'neg'; $pfeil = '&#8600;'; } else { $klasse2 = 'neutr'; $pfeil = '&rarr;'; }
  if ( -floatval($datensatz[52]) > $grenzwert * 10 ) { $pfeil = '&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 10 ) { $pfeil = '&darr;'; }
  if ( -floatval($datensatz[52]) > $grenzwert * 100 ) { $pfeil = '&uarr;&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 100 ) { $pfeil = '&darr;&darr;'; }
  echo "<tr class='zeilen'>";
  echo "<td class='tab_land'><a href='zeitreihen_tabellen.php?vland=" . $datensatz[0] . "&vseite=zeitreihen_tabellen'>" . $datensatz[25] . "</a></td>\n";   # Land
  echo "<td class='tab_trend_$klasse2'>" . number_format(floatval(-$datensatz[52]), 2, ",", ".") . " ($pfeil)</td>";     # Trend 28 Tage
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[30]), 1, ",", "."). "</td>\n";           # Neuinfektionen
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[42]), 2, ",", "."). "</td>\n";           # Neuinfektionen ppm
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[4]), 0, ",", "."). "</td>\n";            # Gesamtinfektionen
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[8]), 1, ",", "."). "</td>\n";            # Gesamtinfektionen ppm
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[36]), 1, ",", "."). "</td>\n";             # Tote
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[48]), 2, ",", "."). "</td>\n";             # Neue Tote ppm
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[6]), 0, ",", "."). "</td>\n";              # Tote Gesamt
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[10]), 1, ",", "."). "</td>\n";             # Tote Gesamt ppm
  echo "<td class='tab_tote'>" . str_replace("nan","0",number_format(floatval($datensatz[6]) / (floatval($datensatz[54]) * floatval($datensatz[23]) / 100000000), 2, ",", ".")) . " %</td>"; # Mortalität
  echo "<td class='tab_impf'>" . number_format(floatval($datensatz[21]), 2, ",", ".") . "</td>\n";            # 1. Impfung
  echo "<td class='tab_impf'>" . number_format(floatval($datensatz[22]), 2, ",", ".") . "</td>\n";            # vollständige Impfung
  echo "<td class='tab_bev'>" . number_format(floatval($datensatz[23]), 0, ",", ".") . "</td>\n";            # Bevölkerung
  echo "</tr>\n";
}}

echo "</tbody>
<tfoot>";

foreach ($neues_array as $datensatz) {
 if ( preg_match("/OWID_WRL/i", $datensatz[0]) == 1 ){
  if ( -floatval($datensatz[52]) > $grenzwert ) { $klasse2 = 'pos'; $pfeil = '&#8599;'; } elseif ( -floatval($datensatz[52]) < -$grenzwert ) { $klasse2 = 'neg'; $pfeil = '&#8600;'; } else { $klasse2 = 'neutr'; $pfeil = '&rarr;'; }
  if ( -floatval($datensatz[52]) > $grenzwert * 10 ) { $pfeil = '&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 10 ) { $pfeil = '&darr;'; }
  if ( -floatval($datensatz[52]) > $grenzwert * 100 ) { $pfeil = '&uarr;&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 100 ) { $pfeil = '&darr;&darr;'; }

  echo "<tr class='zeilen'>";
  echo "<td class='tab_land'><a href='zeitreihen_tabellen.php?vland=" . $datensatz[0] . "&vseite=zeitreihen_tabellen'>" . $datensatz[25] . "</a></td>\n";   # Land
  echo "<td class='tab_trend_$klasse2'>" . number_format(floatval(-$datensatz[52]), 2, ",", ".") . " ($pfeil)</td>";  # Trend 28 Tage
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[30]), 1, ",", "."). "</td>\n";           # Neuinfektionen
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[42]), 2, ",", "."). "</td>\n";           # Neuinfektionen ppm
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[4]), 0, ",", "."). "</td>\n";            # Gesamtinfektionen
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[8]), 1, ",", "."). "</td>\n";            # Gesamtinfektionen ppm
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[36]), 1, ",", "."). "</td>\n";             # Tote
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[48]), 2, ",", "."). "</td>\n";             # Neue Tote ppm
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[6]), 0, ",", "."). "</td>\n";              # Tote Gesamt
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[10]), 1, ",", "."). "</td>\n";             # Tote Gesamt ppm
  echo "<td class='tab_tote'>" . str_replace("nan", "0", number_format(floatval($datensatz[6]) / (floatval($datensatz[54]) * floatval($datensatz[23]) / 100000000), 2, ",", ".")) . " %</td>"; # Mortalität
  echo "<td class='tab_impf'>" . number_format(floatval($datensatz[21]), 2, ",", ".") . "</td>\n";            # 1. Impfung
  echo "<td class='tab_impf'>" . number_format(floatval($datensatz[22]), 2, ",", ".") . "</td>\n";            # 2. Impfung
  echo "<td class='tab_bev'>" . number_format(floatval($datensatz[23]), 0, ",", ".") . "</td>\n";            # Bevölkerung
  echo "</tr>\n";
}}

foreach ($neues_array as $datensatz) {
 if ( preg_match("/OWID_EUN/i", $datensatz[0]) == 1 ){
  if ( -floatval($datensatz[52]) > $grenzwert ) { $klasse2 = 'pos'; $pfeil = '&#8599;'; } elseif ( -floatval($datensatz[52]) < -$grenzwert ) { $klasse2 = 'neg'; $pfeil = '&#8600;'; } else { $klasse2 = 'neutr'; $pfeil = '&rarr;'; }
  if ( -floatval($datensatz[52]) > $grenzwert * 10 ) { $pfeil = '&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 10 ) { $pfeil = '&darr;'; }
  if ( -floatval($datensatz[52]) > $grenzwert * 100 ) { $pfeil = '&uarr;&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 100 ) { $pfeil = '&darr;&darr;'; }

  echo "<tr class='zeilen'>";
  echo "<td class='tab_land'><a href='zeitreihen_tabellen.php?vland=" . $datensatz[0] . "&vseite=zeitreihen_tabellen'>" . $datensatz[25] . "</a></td>\n";   # Land
  echo "<td class='tab_trend_$klasse2'>" . number_format(floatval(-$datensatz[52]), 2, ",", ".") . " ($pfeil)</td>";  # Trend 28 Tage
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[30]), 1, ",", "."). "</td>\n";           # Neuinfektionen
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[42]), 2, ",", "."). "</td>\n";           # Neuinfektionen ppm
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[4]), 0, ",", "."). "</td>\n";            # Gesamtinfektionen
  echo "<td class='tab_faelle'>" . number_format(floatval($datensatz[8]), 1, ",", "."). "</td>\n";            # Gesamtinfektionen ppm
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[36]), 1, ",", "."). "</td>\n";             # Tote
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[48]), 2, ",", "."). "</td>\n";             # Neue Tote ppm
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[6]), 0, ",", "."). "</td>\n";              # Tote Gesamt
  echo "<td class='tab_tote'>" . number_format(floatval($datensatz[10]), 1, ",", "."). "</td>\n";             # Tote Gesamt ppm
  echo "<td class='tab_tote'>" . str_replace("nan", "0", number_format(floatval($datensatz[6]) / (floatval($datensatz[54]) * floatval($datensatz[23]) / 100000000), 2, ",", ".")) . " %</td>"; # Mortalität
  echo "<td class='tab_impf'>" . number_format(floatval($datensatz[21]), 2, ",", ".") . "</td>\n";            # 1. Impfung
  echo "<td class='tab_impf'>" . number_format(floatval($datensatz[22]), 2, ",", ".") . "</td>\n";            # 2. Impfung
  echo "<td class='tab_bev'>" . number_format(floatval($datensatz[23]), 0, ",", ".") . "</td>\n";            # Bevölkerung
  echo "</tr>\n";
}}

?>

</tfoot>
</table>

<br><br>

<h2>Länder</h2>


<!-- Länder -->
<table id='verteilung1'>
       <thead>
         <tr>
         <th colspan='2'></th>
         <th>Trend</th>
         <th class='tab_faelle' colspan='4'>Infektionen</th>
         <th class='tab_tote' colspan='4'>Todesfälle</th>
         <th class='tab_tote'></th>
         <th class='tab_impf' colspan='2'>Impfquote %</th>
        </tr>
        <tr>
         <th class='tab_land'>Land<span onclick='tabelle_sortieren_a(0,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(0,1)'>&darr;</span></th>
         <th class='tab_land'>Kontinent<span onclick='tabelle_sortieren_a(1,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(1,1)'>&darr;</span></th>
         <th>28 Tage<span onclick='tabelle_sortieren_a(2,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(2,1)'>&darr;</span></th>
         <th class='tab_faelle'>Neu*<span onclick='tabelle_sortieren_a(3,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(3,1)'>&darr;</span></th>
         <th class='tab_faelle'>je Million*<span onclick='tabelle_sortieren_a(4,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(4,1)'>&darr;</span></th>
         <th class='tab_faelle'>Gesamt<span onclick='tabelle_sortieren_a(5,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(5,1)'>&darr;</span></th>
         <th class='tab_faelle'>je Million<span onclick='tabelle_sortieren_a(6,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(6,1)'>&darr;</span></th>
         <th class='tab_tote'>Neu*<span onclick='tabelle_sortieren_a(7,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(7,1)'>&darr;</span></th>
         <th class='tab_tote'>je Million*<span onclick='tabelle_sortieren_a(8,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(8,1)'>&darr;</span></th>
         <th class='tab_tote'>Gesamt<span onclick='tabelle_sortieren_a(9,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(9,1)'>&darr;</span></th>
         <th class='tab_tote'>je Million<span onclick='tabelle_sortieren_a(10,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(10,1)'>&darr;</span></th>
         <th class='tab_tote'>Sterblichkeit<span onclick='tabelle_sortieren_a(11,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(11,1)'>&darr;</span></th>
         <th class='tab_impf'>1. Impfung<span onclick='tabelle_sortieren_a(12,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(12,1)'>&darr;</span></th>
         <th class='tab_impf'>vollständig<span onclick='tabelle_sortieren_a(13,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(13,1)'>&darr;</span></th>
         <th class='tab_bev'>Bevölkerung<span onclick='tabelle_sortieren_a(14,1)'>&uarr;</span><span onclick='tabelle_sortieren_d(14,1)'>&darr;</span></th>
        </tr>
       </thead>
       <tbody>

<?php

foreach ($neues_array as $datensatz) {

 if ( preg_match("/OWID/i", $datensatz[0]) != 1 && $datensatz[2] != "" ){
  if ( $datensatz[0] == $laenderverweis ) { $klasse = "_xxx"; } else { $klasse = ""; }                                   # aktuelles Land hervorheben
  if ( -floatval($datensatz[52]) > $grenzwert ) { $klasse2 = 'pos'; $pfeil = '&#8599;'; 
  } elseif ( -floatval($datensatz[52]) < -$grenzwert ) { $klasse2 = 'neg'; $pfeil = '&#8600;';
  } else { $klasse2 = 'neutr'; $pfeil = '&rarr;'; }
  
  if ( -floatval($datensatz[52]) > $grenzwert * 10 ) { $pfeil = '&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 10 ) { $pfeil = '&darr;'; }
  
  if ( -floatval($datensatz[52]) > $grenzwert * 100 ) { $pfeil = '&uarr;&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 100 ) { $pfeil = '&darr;&darr;'; }

  echo "<tr class='zeilen'><td class='tab_land" . $klasse . "'><a href='zeitreihen_tabellen.php?vland=" . $datensatz[0] . "&vseite=zeitreihen_tabellen'>" . $datensatz[25] . "</a></td>\n";
  echo "<td class='tab_land" . $klasse . "'>" . $datensatz[1] . "</td>\n";                                                                      # Land
  echo "<td class='tab_trend_$klasse2'>" . number_format(floatval(-$datensatz[52]), 2, ",", ".") . "&nbsp;($pfeil)</td>";        # Trend 28 Tage
  echo "<td class='tab_faelle" . $klasse . "'>" . number_format(floatval($datensatz[30]), 1, ",", ".") . "</td>\n";         # Neuinfektionen
  echo "<td class='tab_faelle" . $klasse . "'>" . number_format(floatval($datensatz[42]), 2, ",", ".") . "</td>\n";         # Neuinfektionen ppm
  echo "<td class='tab_faelle" . $klasse . "'>" . number_format(floatval($datensatz[4]), 0, ",", ".") . "</td>\n";          # Gesamtinfektionen
  echo "<td class='tab_faelle" . $klasse . "'>" . number_format(floatval($datensatz[8]), 1, ",", ".") . "</td>\n";          # Gesamtinfektionen ppm
  echo "<td class='tab_tote" . $klasse . "'>" . number_format(floatval($datensatz[36]), 1, ",", ".") . "</td>\n";           # Tote
  echo "<td class='tab_tote" . $klasse . "'>" . number_format(floatval($datensatz[48]), 2, ",", ".") . "</td>\n";           # Neue Tote ppm
  echo "<td class='tab_tote" . $klasse . "'>" . number_format(floatval($datensatz[6]), 0, ",", ".") . "</td>\n";            # Tote Gesamt
  echo "<td class='tab_tote" . $klasse . "'>" . number_format(floatval($datensatz[10]), 1, ",", ".") . "</td>\n";           # Tote Gesamt ppm
  echo "<td class='tab_tote" . $klasse . "'>" . str_replace("nan", "0", number_format(floatval($datensatz[6]) / (floatval($datensatz[54]) * floatval($datensatz[23]) / 100000000), 2, ",", ".")) . " %</td>";
  echo "<td class='tab_impf" . $klasse . "'>" . number_format(floatval($datensatz[21]), 2, ",", ".") . "</td>\n";
  echo "<td class='tab_impf" . $klasse . "'>" . number_format(floatval($datensatz[22]), 2, ",", ".") . "</td>\n";
  echo "<td class='tab_bev'>" . number_format(floatval($datensatz[23]), 0, ",", ".") . "</td>\n";            # Bevölkerung
  echo "</tr>\n"; 
}}

echo "</tbody>\n</table>\n";

echo "<p>* = 14-Tage-Durchschnitt</p>";

echo "<p>Legende</p><p>Einheit: Zuwachs der Infektionsrate je 1.000.000 Einwohner pro Tag</p>";

echo "<table>
<tr>
<td class='tab_trend_pos'>&uarr;&uarr;</td>
<td>Trend größer als " . $grenzwert * 100 . "</td>
</tr>
<tr>
<td class='tab_trend_pos'>&uarr;</td>
<td>Trend größer als " . $grenzwert * 10 . "</td>
</tr>
<tr>
<td class='tab_trend_pos'>&#8599;</td>
<td>Trend größer als $grenzwert</td>
</tr>
<tr>
<td class='tab_trend_neutr'>&rarr;</td>
<td>Trend zwischen $grenzwert und -$grenzwert</td>
</tr>
<tr>
<td class='tab_trend_neg'>&#8600;</td>
<td>Trend kleiner als -$grenzwert</td>
</tr>
<tr>
<td class='tab_trend_neg'>&darr;</td>
<td>Trend kleiner als " . -$grenzwert * 10 . "</td>
</tr>
<tr>
<td class='tab_trend_neg'>&darr;&darr;</td>
<td>Trend kleiner als " . -$grenzwert * 100 . "</td>
</tr>
</table>\n</br>";

// der Fußteil

include ("./includes/footer.php");

?>

verteilung_diagramme.php

<?php

include ("./includes/header.php");

// Funktionen

function test_owid($daten){
 if (preg_match("/OWID/i",$daten[3])==1){
  return 1;
 }
}

function test_region($daten){
 global $region;
 if (preg_match("/$region/i",$daten[1])==1){
  return 1;
 }
}

function owid_entfernen($daten){
 if (preg_match("/OWID/i",$daten[3])!=1){
  return 1;
 }
}

// der Inhalt

echo "<h2>Verteilung zwischen den Ländern für den " . date("d.m.Y",strtotime($datumakt)) . " (14-Tage-Mittel)</h2>\n";

$regionen = array("Europe","North America","South America","Africa","Asia","Oceania");

// Verteilunsdiagramm
# # Daten von heute filtern
$neues_array = filter_datum();

$neues_array2 = array_filter($neues_array,"owid_entfernen");

$r = 0;

foreach ( $regionen as $region ) {

$neues_array3[$r] = array_filter($neues_array2,"test_region");
$neues_array4[$r] = array_filter($neues_array2,"test_region");

$breite = (count($neues_array3[$r])) * 10;
$hoehe = 320;

$max_f = max(array_column($neues_array3[$r],39));
$max_t = max(array_column($neues_array3[$r],45));

$f_quer = array_sum(array_column($neues_array3[$r],39))/count(array_column($neues_array3[$r],39));
$t_quer = array_sum(array_column($neues_array3[$r],45))/count(array_column($neues_array3[$r],45));


echo "<h3>Region:$region</h3>\n";

echo "<h3><span class='link' onclick='";

echo 'document.getElementById("verteilung_' . $r . '_tot").style.visibility="hidden";document.getElementById("verteilung_' . $r . '_inf").style.visibility="visible";';

echo "'>nach Neuinfektionen</span> / <span class='link' onclick='";

echo 'document.getElementById("verteilung_' . $r . '_tot").style.visibility="visible";document.getElementById("verteilung_' . $r . '_inf").style.visibility="hidden";';

echo "' style='color:red;'>nach Todesfällen</span></h3>\n";

foreach($neues_array3[$r] as $arrr) { $sort_numcie[$r][] = $arrr[39]; }
array_multisort($sort_numcie[$r], SORT_DESC, $neues_array3[$r]);

echo "<div style='position:relative;'>\n";

echo "<svg style='position:relative;visibility:visible;' id='verteilung_" . $r . "_inf' width='" . ($breite + 230) . "' height='" . $hoehe . "'>
 <defs>
  <style type='text/css'>
   <![CDATA[
    text {
        fill:#000000;
        font-size:7pt;
    }

    line {
        stroke-width:2
    }

    .l_A {
        stroke:#000000;
        stroke-width:5
    }

    .l_B {
        stroke:#ff0000;
        stroke-width:4
    }

    .l_C {
        stroke:#000000;
        stroke-width:4
    }

    .l_D {
        stroke:#ff0000;
        stroke-width:5
    }

    .l1 {
        stroke:#000000;
    }

    .l2 {
        stroke:#ff0000;
    }

    .t_schwarz {
        font-size:11pt;
    }

    .t_rot {
        fill:red;
        font-size:11pt;
    }
               .
   ]]>
  </style>
 </defs>\n";

$z=0;

foreach ( $neues_array3[$r] as $datensatz ) {
  $wert_f=floatval($datensatz[39]);    # Neuinfektionen / ppm
  $wert_t=floatval($datensatz[45]);    # Tote / ppm
  echo "<line x1='" . ($z*10+5) . "' y1='200' x2='" . ($z*10+5) . "' y2='" . round((200-200*$wert_t/$max_t),1) . "' class='l_B' />\n"; # Tote
  echo "<line x1='" . ($z*10+2) . "' y1='200' x2='" . ($z*10+2) . "' y2='" . round((200-200*$wert_f/$max_f),1) . "' class='l_A' />\n"; # Fälle

  if ($datensatz[0]==$laenderverweis) {
   echo "<text x='" .  ($z*10+2) . "' y='204' style='fill:#FF0000;' transform='rotate(70," . ($z*10+2) . ",204)'>" . $datensatz[25] . " ($z)</text>\n"; 
  } else { 
   echo "<text x='" .  ($z*10+2) . "' y='204' transform='rotate(70," . ($z*10+2) . ",204)'>" . $datensatz[25] . "</text>\n"; 
  }
 $z++;
}

echo "<line x1='0' y1='" . round((200-200*$f_quer/$max_f),1) . "' x2='" . $breite . "' y2='" . round((200-200*$f_quer/$max_f),1) . "' class='l1' />\n";
echo "<line x1='0' y1='" . round((200-200*$t_quer/$max_t),1) . "' x2='" . $breite . "' y2='" . round((200-200*$t_quer/$max_t),1) . "' class='l2' />\n";

echo "<text x='" . ( $breite + 10 ) . "' y='80' class='t_schwarz'>Durchschnitt</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='100' class='t_schwarz'>" . number_format($f_quer/14,2,",",".") . " Infektionen</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='118' class='t_rot'>" . number_format($t_quer/14,2,",",".") . " Todesfälle</text>\n";
echo "<text x='" . ( $breite + 10 ) . "' y='140' class='t_schwarz'>Maximum</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='160' class='t_schwarz'>" . number_format($max_f/14,2,",",".") . " Infektionen</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='178' class='t_rot'>" . number_format($max_t/14,2,",",".") . " Todesfälle</text>\n";
echo "<text x='" . ( $breite + 10 ) . "' y='200' class='t_schwarz'>je Million Einwohner pro Tag</text>\n";

echo "</svg>\n</br>\n";


foreach($neues_array4[$r] as $arrr) { $sort_numcie2[$r][] = $arrr[45]; }
array_multisort($sort_numcie2[$r], SORT_DESC, $neues_array4[$r]);

echo "<svg style='position:absolute;top:0;visibility:hidden;' id='verteilung_" . $r . "_tot'  width='" . ($breite+230) . "' height='" . $hoehe . "'>
 <defs>
  <style type='text/css'>
   <![CDATA[

   ]]>
  </style>
 </defs>\n";

$z=0;

foreach ( $neues_array4[$r] as $datensatz ) {
  $wert_f=floatval($datensatz[39]);    # Neuinfektionen / ppm
  $wert_t=floatval($datensatz[45]);    # Tote / ppm
  echo "<line x1='" . ($z*10+2) . "' y1='200' x2='" . ($z*10+2) . "' y2='" . round((200-200*$wert_f/$max_f),1) . "' class='l_C' />\n"; # Fälle
  echo "<line x1='" . ($z*10+5) . "' y1='200' x2='" . ($z*10+5) . "' y2='" . round((200-200*$wert_t/$max_t),1) . "' class='l_D' />\n"; # Tote

  if ($datensatz[0]==$laenderverweis) {
   echo "<text x='" .  ($z*10+2) . "' y='204' style='fill:#FF0000;' transform='rotate(70," . ($z*10+2) . ",204)'>" . $datensatz[25] . " ($z)</text>\n"; 
  } else { 
   echo "<text x='" .  ($z*10+2) . "' y='204' transform='rotate(70," . ($z*10+2) . ",204)'>" . $datensatz[25] . "</text>\n"; 
  }
 $z++;
}

echo "<line x1='0' y1='" . round((200-200*$f_quer/$max_f),1) . "' x2='" . $breite . "' y2='" . round((200-200*$f_quer/$max_f),1) . "' class='l1' />\n";
echo "<line x1='0' y1='" . round((200-200*$t_quer/$max_t),1) . "' x2='" . $breite . "' y2='" . round((200-200*$t_quer/$max_t),1) . "' class='l2' />\n";

echo "<text x='" . ( $breite + 10 ) . "' y='80' class='t_schwarz'>Durchschnitt</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='100' class='t_schwarz'>" . number_format($f_quer/14,2,",",".") . " Infektionen</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='118' class='t_rot'>" . number_format($t_quer/14,2,",",".") . " Todesfälle</text>\n";
echo "<text x='" . ( $breite + 10 ) . "' y='140' class='t_schwarz'>Maximum</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='160' class='t_schwarz'>" . number_format($max_f/14,2,",",".") . " Infektionen</text>\n";
echo "<text x='" . ( $breite + 15 ) . "' y='178' class='t_rot'>" . number_format($max_t/14,2,",",".") . " Todesfälle</text>\n";
echo "<text x='" . ( $breite + 10 ) . "' y='200' class='t_schwarz'>je Million Einwohner pro Tag</text>\n";

echo "</svg>\n</br>\n";

$r++;

echo "</div>\n";

}

// der Fußteil

include ("./includes/footer.php");

?>

includes/zeitreihe_gesamtinfektionen.php

<?php

# Maximum ermitteln (Fälle kumuliert)
$max_f_ges = max(array_column($neues_array, 8));

echo "<!-- Gesamtinfektionen -->\n\n";

echo "<svg width='$svg_laenge' height='$svg_hoehe' transform='scale(" . 1 / $faktor . ")'>\n";
echo "<g id='plot2' transform='translate($x_offset,0)'>\n";
echo "<line x1='0' y1='400' x2='" . $z * 2 . "' y2='400' style='stroke-width:2'/>\n";  #x-Achse unten
echo "<g id='plot2' transform='translate(0,400)'>\n";
echo "<g style='stroke-width:2;'>";

$z = 0;

foreach ( $neues_array as $datensatz ) {
 $wert_f = round((-400 * floatval($datensatz[8]) / ($max_f_ges * 1.1)), 1);     # Gesamtinfektionen / ppm
 $wert_t = round((-400 * floatval($datensatz[10]) / ($max_f_ges * 1.1)), 1);    # Tote
 $wert_g = round((-400 * floatval($datensatz[54]) / ($max_f_ges * 1.1)), 1);    # Genesene (Infektionen vor 14 Tagen - Tote)
 $wert_a = $wert_f - $wert_g;                                           # aktive Infektionen

 $pos_x = $z * $s;

# echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_f' class='l_gf'/>\n";         # Fälle
 echo "<line x1='$pos_x' y1='" . ( $wert_a + $wert_t ) . "' x2='$pos_x' y2='" . ( $wert_a + $wert_g + $wert_t ) . "' class='l_gen'/>\n";        # Genesene
 echo "<line x1='$pos_x' y1='$wert_t' x2='$pos_x' y2='" . ( $wert_a + $wert_t ) . "' class='l_gf'/>\n";        # aktive Infektionen
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_t' class='l_gt'/>\n";         # Tote

// Datum

 if ( substr($datensatz[3], 8, 2) == "01" ){      # Wenn die letzten beiden Zeichen des Datumswertes "01" sind
  echo "<text x='" . ( $z * 2 - 3 ) . "' y='10' transform='rotate(70," . ( $z * 2 - 3 ) . ",10)'>" . date("M y", strtotime($datensatz[3])) . "</text>\n";   # Datum zeichnen, um 90 ° im UZS gedreht
  echo "<line x1='" . $z * 2 . "' y1='0' x2='" . $z * 2 . "' y2='5' />\n";   # Skalenstrich zeichnen
 }
 $z++;
}

echo "</g>";
echo "</g>";

// Skalierung

$max_f_gerundet = intval(round($max_f_ges * 1.1));                              # Maximum abrunden
$laenge = strlen(strval($max_f_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_f_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile=$zahl1;
$interval_skala=pow(10, ($laenge - 1));                                   # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1

// Hauptlinien

for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 echo "<line x1='0' y1='" . round((400 - 400 * $a * $interval_skala / ($max_f_ges * 1.1)), 1) . "' x2='$svg_laenge' y2='" . round((400 - 400 * $a * $interval_skala / ($max_f_ges * 1.1)), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round((405 - 400 * $a * $interval_skala / ($max_f_ges * 1.1)), 1) . "' text-anchor='end' style='fill:#000000;'>" . number_format($a * $interval_skala, 0,",",".") . "</text>\n";

// Hilflinien

 if ( $anzahl_skalenteile < 3 ){                                          # wenn es weniger als 3 Hauptlinien
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / ($max_f_ges * 1.1) ) . "' text-anchor='end' x2='$svg_laenge' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / ($max_f_ges * 1.1) ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<text x='-2' y='" . ( 405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / ($max_f_ges * 1.1) ) . "' text-anchor='end' style='fill:#000000'>" . number_format(($a * $interval_skala - $interval_skala / 2), 0,",",".") . "</text>\n";

  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / ($max_f_ges * 1.1) ) . "' text-anchor='end' x2='$svg_laenge' y2='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / ($max_f_ges * 1.1) ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<text x='-2' y='" . ( 405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / ($max_f_ges * 1.1) ) . "' text-anchor='end' style='fill:#000000'>" . number_format(($a * $interval_skala + $interval_skala / 2), 0,",",".") . "</text>\n";
 }
}

echo "<text x='" . ( 12 - $x_offset ) . "' y='300' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",300)'>Je Million Einwohner</text>\n";

echo "</g>";

//Legende2

echo "
<g id='legende2' transform='translate(" . ( $x_offset + 50 ) . ",0)'>
<rect x='0' y='40' rx='8' ry='8' width='200' height='85' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
<text x='10' y='60' class='legende'>Legende</text>
<text x='20' y='80' style='fill:#000088;'>Aktive Infektionen</text>
<text x='20' y='95' style='fill:#FF6600;'>Genesene</text>
<text x='20' y='110' style='fill:#770000;'>Todesfälle</text>
</g>\n";

echo "</svg>\n";

?>

includes/zeitreihe_neuinfektionen_gesamt.php

<?php

# Maximum ermitteln
$max_f = max(array_column($neues_array, 42)) * 1.05; # Faelle
$max_t = max(array_column($neues_array, 48)) * 1.05; # Tote
$max_i = max(array_column($neues_array, 55)) * 1.05; # Impfungen

# Faktoren für die Skalierung ermitteln
$FI = $max_i / $max_f;

$FI_stellen = floor(log10($FI));
$FI_ziffer1 = str_split($FI)[0];

$faktor_impfungen = ($FI_ziffer1 + 1) * pow(10, $FI_stellen);

# wenn der Faktor 0 ist auf Standard-Wert setzen
if ($faktor_impfungen == 0) {$faktor_impfungen = 25;}

$FT = $max_f / $max_t;

if ( $FT > 100 ) {
 $faktor_tote = floor($FT - ($FT % 100)) / 2;
} else {
 $faktor_tote = floor($FT - ($FT % 10)) / 2;
}

if ($faktor_tote == 0) {$faktor_tote = 25;}

#echo "<p>max_f: $max_f max_t: $max_t FT: $FT - Stellen: $FT_stellen - 1. Ziffer: $FT_ziffer1 - $FT2 - $FT2i</p>";

echo "<!-- Neuinfektionen -->\n\n";

echo "<svg width='$svg_laenge' height='$svg_hoehe' transform='scale(" . 1 / $faktor . ")'>\n";
echo "<g id='plot1' transform='translate($x_offset, 0)'>\n";

# X-Achse
echo "<line x1='0' y1='400' x2='$svg_laenge' y2='400' style='stroke:#000000; stroke-width:2'/>\n";

$z = 0;

$wert_f3_tmp = 400;
$wert_t3_tmp = 400;
$wert_i3_tmp = 400;

foreach ( $neues_array as $datensatz ) {
 # Die Y-Koordniate ergibt sich aus der Höhe der Grafik minus Dem Anteil des Wertes am Maximalwert
 $wert_f = round(400 - 400 * floatval($datensatz[9] / $max_f), 1);                                                   # Anzahl Fälle (ppm) als float
 $wert_t = round(400 - 400 * floatval($datensatz[11] * $faktor_tote / $max_f), 1);                                             # Anzahl Tote (ppm) als float*10
 $wert_i = round(400 - 400 * floatval($datensatz[19] / floatval($datensatz[23]) * ( 1000000 / $faktor_impfungen ) / $max_f ), 1) ;    # Anzahl Impfungen

 $wert_f3 = round(400 - 400 * floatval($datensatz[42] / $max_f), 1);               
 $wert_t3 = round(400 - 400 * floatval($datensatz[48] * $faktor_tote / $max_f), 1);
 $wert_i3 = round(400 - 400 * floatval($datensatz[55] / $faktor_impfungen / $max_f), 1);

 $pos_x = $z * $s + 3;
 $pos_x_2 = $pos_x + 1;

 echo "<line x1='$pos_x' y1='400' x2='$pos_x' y2='$wert_f' class='l_f'/>\n";                 # Linie zeichnen (Fälle)
 echo "<line x1='$pos_x' y1='400' x2='$pos_x' y2='$wert_t' class='l_t'/>\n";                 # Linie zeichnen (Tote)
 echo "<line x1='$pos_x_2' y1='400' x2='$pos_x_2' y2='$wert_i' class='l_i'/>\n";             # Linie zeichnen (Impfungen)
 echo "<line x1='$pos_x_2' y1='$wert_f3' x2='$z_tmp' y2='$wert_f3_tmp' class='l_gf'/>\n";    # Linie zeichnen (gleitender Durchschnitt Fälle)
 echo "<line x1='$pos_x_2' y1='$wert_t3' x2='$z_tmp' y2='$wert_t3_tmp' class='l_gt'/>\n";    # Linie zeichnen (gleitender Durchschnitt Tote)

//if ( $wert_i == 0 && $wert_i_tmp == 0 ) {} else {

 echo "<line x1='$pos_x_2' y1='$wert_i3' x2='$z_tmp' y2='$wert_i3_tmp' class='l_gi'/>\n";    # Linie zeichnen (gleitender Durchschnitt Impfungen)

//}

 $z_tmp = $z * $s + 4;
 $wert_f3_tmp = $wert_f3;
 $wert_t3_tmp = $wert_t3;
 $wert_i3_tmp = $wert_i3;

 // Datum

 if (substr($datensatz[3], 8, 2) == "01"){                                                                                                                  # Wenn die letzten beiden Zeichen des Datumswertes "01" sind
  echo "<text x='" . ( $z * 2 - 3 ) . "' y='410' transform='rotate(70," . ( $z * 2 - 3 ) . ",410)'>" . date("M y",strtotime($datensatz[3])) . "</text>\n";  # Datum zeichnen, um 90 ° im UZS gedreht
  echo "<line x1='" . $z * 2 . "' y1='400' x2='" . $z * 2 . "' y2='405' />\n";                                                                              # Skalenstrich zeichnen
 }

 $index = $x;
 $z++;
}

// Skalierung

$max_f_gerundet = intval(round($max_f));                                  # Maximum abrunden
$laenge = strlen(strval($max_f_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_f_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile = $zahl1;                                             #
$interval_skala = pow(10, ($laenge - 1));                                 # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1
                                                                          # alternativ: interval_skala=ceil(log10($zahl);
// Hauptlinien

echo "<g text-anchor='end' style='font-size:80%;stroke-width:1;'>\n";     # Formatierungen für die Legende

for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 $const1 = round((400 - 400 * $a * $interval_skala / $max_f ), 1);
 $const2 = round((405 - 400 * $a * $interval_skala / $max_f ), 1);
 
 echo "<line x1='0' y1='$const1' x2='$svg_laenge' y2='$const1' style='stroke:#555555;'/>\n";
 echo "<text x='-2' y='$const2' style='fill:#0000FF;'>" . $a * $interval_skala . "</text>\n";
 echo "<text x='-2' y='" . ($const2 + 12) . "' style='fill:#FF0000;'>" . round($a * $interval_skala / $faktor_tote, 0) . "</text>\n";
 echo "<text x='-2' y='" . ($const2 + 24) . "' style='fill:#007700;'>" . $a * $interval_skala * $faktor_impfungen . "</text>\n";

// Hilflinien

 if ( $anzahl_skalenteile < 3 ){                                            # wenn es weniger als 3 Skalenstriche gibt
  $const1 = round((400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ), 1);
  $const2 = round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ), 1);
  $const3 = round((400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f ), 1);
  $const4 = round((405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f ), 1);

  echo "<line x1='0' y1='$const1' x2='$svg_laenge' y2='$const1' style='stroke:#555555;'/>\n";
  echo "<text x='-2' y='$const2' style='fill:#0000FF;'>" . ( $a * $interval_skala - $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . ($const2 + 12) . "' style='fill:#FF0000;'>" . round(( $a * $interval_skala - $interval_skala / 2 ) / $faktor_tote, 0) . "</text>\n";
  echo "<text x='-2' y='" . ($const2 + 24) . "' style='fill:#007700;'>" . ( $a * $interval_skala - $interval_skala / 2 ) * $faktor_impfungen . "</text>\n";

  echo "<line x1='0' y1='$const3' x2='$svg_laenge' y2='$const3' style='stroke:#555555;'/>\n";
  echo "<text x='-2' y='$const4' style='fill:#0000FF;'>" . ( $a * $interval_skala + $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . ($const4 + 12) . "' style='fill:#FF0000;'>" . round(( $a * $interval_skala + $interval_skala / 2 ) / $faktor_tote, 0) . "</text>\n";
  echo "<text x='-2' y='" . ($const4 + 24) . "' style='fill:#007700;'>" . ( $a * $interval_skala + $interval_skala / 2 ) * $faktor_impfungen . "</text>\n";
 
 }
}

echo "</g>\n";

echo "<text x='" . ( 12 - $x_offset ) . "' y='330' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",330)'>[Je Million Einwohner pro Tag]</text>\n";

echo "</g>\n";

// Legende1

echo "
<g id='legende1' transform='translate(" . ( $x_offset + 50 ) . ",0)'>
 <rect x='0' y='40' rx='8' ry='8' width='260' height='125' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
 <text x='20' y='60' class='legende'>Legende</text>

 <line x1='15' y1='76' x2='25' y2='76' style='stroke:#6666FF; stroke-width:2'/>
 <text x='30' y='80' style='fill:#6666FF'>Neuinfektionen</text>

 <line x1='15' y1='91' x2='25' y2='91' class='gd' style='stroke:#000088;'/>
 <text x='30' y='95' class='gd' style='fill:#000077;'>gleitender Durchschnitt (14 Tage)</text>

 <line x1='15' y1='106' x2='25' y2='106' style='stroke:#FF6666; stroke-width:2'/>
 <text x='30' y='110' style='fill:#FF6666;'>Todesfälle</text>

 <line x1='15' y1='121' x2='25' y2='121' class='gd' style='stroke:#770000;'/>
 <text x='30' y='125' class='gd' style='fill:#770000;'>gleitender Durchschnitt (14 Tage)</text>

 <line x1='15' y1='136' x2='25' y2='136' style='stroke:#22AA22; stroke-width:2'/>
 <text x='30' y='140' style='fill:#22AA22;'>Impfungen</text>

 <line x1='15' y1='151' x2='25' y2='151' class='gd' style='stroke:#007700;'/>
 <text x='30' y='155' class='gd' style='fill:#007700;'>gleitender Durchschnitt (14 Tage)</text>
</g>\n";

echo "</svg>\n\n";
?>

zeitreihen_tabellen.php

<?php

include ("./includes/header.php");

$land_akt = $laenderverweis;

// der Inhalt

$grenzwert = 0.1;

?>

<h3>Übersicht für <?=$liste_laender_iso_de["$laenderverweis"]?></h3>
      <p><a href="zeitreihen_diagramme.php?vland=<?=$laenderverweis?>&vseite=zeitreihen_diagramme">zum den Diagrammen</a></p>

    <table>
       <thead>
        <tr>
        <th></th>
         <th colspan='2'>Trend</th>
         <th class='tab_faelle' colspan='4'>Infektionen</th>
         <th class='tab_tote' colspan='4'>Todesfälle</th>
         <th class='tab_impf' colspan='2'>Impfquote %</th>
        </tr>
        <tr>
         <th class='tab_datum'>Datum</th>
         <th class='tab_trend'>14 Tage</th>
         <th class='tab_trend'>28 Tage</th>
         <th class='tab_faelle'>Neu</th>
         <th class='tab_faelle'>je Million</th>
         <th class='tab_faelle'>Gesamt</th>
         <th class='tab_faelle'>je Million</th>
         <th class='tab_tote'>Neu</th>
         <th class='tab_tote'>je Million</th>
         <th class='tab_tote'>Gesamt</th>
         <th class='tab_tote'>je Million</th>
         <th class='tab_impf'>1. Impfung</th>
         <th class='tab_impf'>vollständig</th>
        </tr>
       </thead>
       <tbody>

<?

# neues Array erzeugen, in dem nur die Werte der aktuellen Region stehen
# umkehren, damit die neuesten Werte oben angezeigt werden
$neues_array = array_reverse(filter_land());

foreach ($neues_array as $datensatz) {
 if ( -floatval($datensatz[50]) > $grenzwert ) { $klasse1='pos'; $pfeil1='&#8599;'; } elseif ( -floatval($datensatz[50]) < -$grenzwert ) { $klasse1='neg'; $pfeil1='&#8600;'; } else { $klasse1='neutr'; $pfeil1='&rarr;'; }
 if ( -floatval($datensatz[52]) > $grenzwert ) { $klasse2='pos'; $pfeil2='&#8599;'; } elseif ( -floatval($datensatz[52]) < -$grenzwert ) { $klasse2='neg'; $pfeil2='&#8600;'; } else { $klasse2='neutr'; $pfeil2='&rarr;'; }

  if ( -floatval($datensatz[50]) > $grenzwert * 10 ) { $pfeil1='&uarr;'; }
  if ( -floatval($datensatz[50]) < -$grenzwert * 10 ) { $pfeil1='&darr;'; }

  if ( -floatval($datensatz[52]) > $grenzwert * 10 ) { $pfeil2='&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 10 ) { $pfeil2='&darr;'; }
  
  if ( -floatval($datensatz[50]) > $grenzwert * 100 ) { $pfeil1='&uarr;&uarr;'; }
  if ( -floatval($datensatz[50]) < -$grenzwert * 100 ) { $pfeil1='&darr;&darr;'; }

  if ( -floatval($datensatz[52]) > $grenzwert * 100 ) { $pfeil2='&uarr;&uarr;'; }
  if ( -floatval($datensatz[52]) < -$grenzwert * 100 ) { $pfeil2='&darr;&darr;'; }


 echo "<tr class='zeilen'><td class='tab_datum'>" . date("j.n.Y", strtotime($datensatz[3])) . "</td>
        <td class='tab_trend_$klasse1'>" . number_format(floatval(-$datensatz[50]), 2, ",", ".") . " ($pfeil1)</td> 
        <td class='tab_trend_$klasse2'>" . number_format(floatval(-$datensatz[52]), 2, ",", ".") . " ($pfeil2)</td>
        <td class='tab_faelle'>" . number_format(intval($datensatz[5]), 0, ",", ".") . "</td>
        <td class='tab_faelle'>" . number_format(floatval($datensatz[9]), 2, ",", ".") . "</td>
        <td class='tab_faelle'>" . number_format(intval($datensatz[4]), 0, ",", ".") . "</td>
        <td class='tab_faelle'>" . number_format(floatval($datensatz[8]), 2, ",", ".") . "</td>
        <td class='tab_tote'>" . number_format(intval($datensatz[7]), 0, ",", ".") . "</td>
        <td class='tab_tote'>" . number_format(floatval($datensatz[11]), 2, ",", ".") . "</td>
        <td class='tab_tote'>" . number_format(intval($datensatz[6]), 0, ",", ".") . "</td>
        <td class='tab_tote'>" . number_format(floatval($datensatz[10]), 2, ",", ".") . "</td>
        <td class='tab_impf'>" . number_format(floatval($datensatz[21]), 2, ",", ".") . "</td>
        <td class='tab_impf'>" . number_format(floatval($datensatz[22]), 2, ",", ".") . "</td>
       </tr>\n"; 
}

echo "</tbody>\n</table>\n";

echo "<br/>
<table>
 <tr>
  <td class='tab_trend_pos'>&uarr;</td>
  <td>Trend größer als " . $grenzwert*10 . "</td>
 </tr>
 <tr>
  <td class='tab_trend_pos'>&#8599;</td>
  <td>Trend größer als $grenzwert</td>
 </tr>
 <tr>
  <td class='tab_trend_neutr'>&rarr;</td>
  <td>Trend zwischen $grenzwert und -$grenzwert</td>
 </tr>
 <tr>
  <td class='tab_trend_neg'>&#8600;</td>
  <td>Trend kleiner als -$grenzwert</td>
 </tr>
 <tr>
  <td class='tab_trend_neg'>&darr;</td>
  <td>Trend kleiner als " . -$grenzwert*10 . "</td>
 </tr>
</table>\n</br>";

// der Fußteil

include ("./includes/footer.php");

?>

zeitreihen_diagramme.php

<?php

$faelle_tmp = 0;
$tote_tmp = 0;

include ("./includes/header.php");

# Streckung der Werte
$s = 2;

# Faktor für die Skalierung der Diagramme
$faktor = 1;

# Faktor für die Skalierung von Impfungen zu Infektionen
$faktor_impfungen = 40;

$land_akt = $laenderverweis;

# Land filtern
$neues_array = filter_land();

# linker Rand
$x_offset = 80;

# Länge der SVG-Datei
$svg_laenge = count($neues_array) * $s + $x_offset + 10;

# Höhe der SVG-Datei
$svg_hoehe = 500;


// Diagramm1 - Neuinfektionen

echo "<h2>Verlauf seit Beginn der Pandemie für " . $liste_laender_iso_de["$laenderverweis"] . "</h2>\n";
echo "<h3>Neuinfektionen, Todesfälle und Impfungen (Infektionsrate, Sterberate, Impfrate)</h3>\n";
include ("./includes/zeitreihe_neuinfektionen_gesamt.php");   # Modul Neuinfektionen


// Diagramm2 - Gesamtinfektionen1

echo "<!-- Gesamtinfektionen 1 -->\n\n";
echo "<h3>Aktive Infektionen, Genesene und Todesfälle im Vergleich</h3>\n";
include ("./includes/zeitreihe_gesamtinfektionen.php");   # Modul Gesamtinfektionen


// aktive Infektionen

# Maximum ermitteln (Genesene)
$max_g = max(array_column($neues_array, 54)) / 3;

echo "<!-- aktive Infektionen -->\n\n";
echo "<h3>Aktive Infektionen</h3>\n";
echo "<svg width='$svg_laenge' height='500'>\n";
echo "<g id='plot2' transform='translate($x_offset,0)'>\n";
echo "<line x1='0' y1='400' x2='" . $z * 2 . "' y2='400' style='stroke-width:2'/>\n";  #x-Achse unten
echo "<g id='plot2' transform='translate(0,400)'>\n";
echo "<g style='stroke-width:2;'>";

$z = 0;

foreach ( $neues_array as $datensatz ) {
 $wert_f = round((-400 * floatval($datensatz[8]) / $max_g), 1);     # Gesamtinfektionen / ppm
 $wert_t = round((-400 * floatval($datensatz[10]) / $max_g), 1);    # Tote
 $wert_g = round((-400 * floatval($datensatz[54]) / $max_g), 1);    # Genesene (Infektionen vor 14 Tagen - Tote)
 $wert_a = $wert_f - $wert_g;                                 # aktive Infektionen

 $pos_x = $z * $s;

 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_a' class='l_gf'/>\n";        # aktive Infektionen

// Datum

 if ( substr($datensatz[3], 8, 2) == "01" ){      # Wenn die letzten beiden Zeichen des Datumswertes "01" sind
  echo "<text x='" . ( $z * 2 - 3 ) . "' y='10' transform='rotate(70," . ( $z * 2 - 3 ) . ",10)'>" . date("M y", strtotime($datensatz[3])) . "</text>\n";   # Datum zeichnen, um 90 ° im UZS gedreht
  echo "<line x1='" . $z * 2 . "' y1='0' x2='" . $z * 2 . "' y2='5' />\n";   # Skalenstrich zeichnen
 }
 $z++;
}

echo "</g>";
echo "</g>";

// Skalierung

$max_g_gerundet = intval(round($max_g));                              # Maximum abrunden
$laenge = strlen(strval($max_g_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_g_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile=$zahl1;
$interval_skala=pow(10, ($laenge - 1));                                   # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1

// Hauptlinien

for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 echo "<line x1='0' y1='" . round((400 - 400 * $a * $interval_skala / $max_g), 1) . "' x2='$svg_laenge' y2='" . round((400 - 400 * $a * $interval_skala / $max_g), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round((405 - 400 * $a * $interval_skala / $max_g), 1) . "' text-anchor='end' style='fill:#000000;'>" . number_format($a * $interval_skala, 0,",",".") . "</text>\n";

// Hilflinien

 if ( $anzahl_skalenteile < 3 ){                                          # wenn es weniger als 3 Hauptlinien
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_g ) . "' text-anchor='end' x2='$svg_laenge' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_g ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<text x='-2' y='" . ( 405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_g ) . "' text-anchor='end' style='fill:#000000'>" . number_format(($a * $interval_skala - $interval_skala / 2), 0,",",".") . "</text>\n";
 }
}

echo "<text x='" . ( 12 - $x_offset ) . "' y='300' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",300)'>Je Million Einwohner</text>\n";

echo "</g>";

//Legende2

echo "
<g id='legende2' transform='translate(" . ( $x_offset + 50 ) . ",0)'>
<rect x='0' y='40' rx='8' ry='8' width='200' height='85' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
<text x='10' y='60' class='legende'>Legende</text>
<text x='20' y='80' style='fill:#000088;'>Aktive Infektionen</text>
<text x='20' y='95' style='fill:#FF6600;'>Genesene</text>
<text x='20' y='110' style='fill:#770000;'>Todesfälle</text>
</g>\n";

echo "</svg>\n";


// Gesamtinfektionen2

echo "<!-- Gesamtinfektionen 2 -->\n\n";

echo "<h3>Gesamtinfektionen, Todesfälle und Impfungen im Vergleich</h3>\n";
echo "<svg width='$svg_laenge' height='500'>\n";
echo "<g id='plot3' transform='translate($x_offset,0)'>\n";
echo "<line x1='0' y1='400' x2='" . $z*2 . "' y2='400' style='stroke-width:2'/>\n";  # x-Achse unten
echo "<g id='plot2' transform='translate(0,400)'>\n";
echo "<g style='stroke-width:1;'>";

$z = 0;

$max_f_ges = 100000;

foreach ( $neues_array as $datensatz ) {
 $wert_f = round((-400 * floatval($datensatz[8] / 10) / $max_f_ges), 1);        # Infektionen
 $wert_g = round((-400 * floatval($datensatz[54] / 10) / $max_f_ges), 1);       # Genesene
 $wert_t = round((-400 * floatval($datensatz[10] / 10) / $max_f_ges), 1);       # Tote
 $wert_i1 = round((-400 * floatval($datensatz[21] * 1000) / $max_f_ges), 1);    # 1. Impfung
 $wert_i2 = round((-400 * floatval($datensatz[22] * 1000) / $max_f_ges), 1);    # Vollständige Impfung
      
 $pos_x = $z * $s + 3;
 $pos_x_2 = $pos_x + 1;
                                                                                                                                                                           
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_f' class='l_gf'/>\n";      # Linie zeichnen (Fälle)
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_g' class='l_gen'/>\n";     # Linie zeichnen (Genesene)
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_t' class='l_gt'/>\n";      # Linie zeichnen (Tote)
 echo "<line x1='$pos_x_2' y1='0' x2='$pos_x_2' y2='$wert_i1' class='l_i'/>\n";  # Linie zeichnen (1. Impfung)
 echo "<line x1='$pos_x_2' y1='0' x2='$pos_x_2' y2='$wert_i2' class='l_gi'/>\n"; # Linie zeichnen (vollständig geimpft)

// Datum

 if ( substr($datensatz[3], 8, 2) == "01" ){                                          # Wenn die letzten beiden Zeichen des Datumswertes "01" sind
  echo "<text x='" . ( $z * 2 - 3 ) . "' y='10' transform='rotate(70," . ( $z * 2 - 3 ) . ",10)'>" . date("M y", strtotime($datensatz[3])) . "</text>\n";   # Datum zeichnen, um 90 ° im UZS gedreht
  echo "<line x1='" . $z * 2 . "' y1='0' x2='" . $z * 2 . "' y2='5' />\n";                                             # Skalenstrich zeichnen
 }

 $z++;
}

echo "</g>";

// Skalierung

$max_f_gerundet = intval(round($max_f_ges));                              # Maximum abrunden
$laenge = strlen(strval($max_f_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_f_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile = $zahl1;
$interval_skala = pow(10, ($laenge - 1));                                   # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1

// Hauptlinien

for ( $a = 1; $a <= 10; $a++ ) {
 echo "<line x1='0' y1='" . round(( -400 * $a / 10 * $interval_skala / $max_f_ges), 1) . "' x2='$svg_laenge' y2='" . round(( -400 * $a / 10 * $interval_skala / $max_f_ges), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round(( 5 - 400 * $a / 10 * $interval_skala / $max_f_ges), 1) . "' text-anchor='end' style='fill:#000000;'>" . number_format($a * 10 , 0,",",".") . " %</text>\n";
}

echo "</g>\n";

//Legende3

echo "
<g id='legende3' transform='translate(" . ( $x_offset + 50 ) . ",0)'>
<rect x='0' y='40' rx='8' ry='8' width='200' height='115' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
<text x='10' y='60'>Legende</text>
<text x='20' y='80' style='fill:#22AA22;font-size:14;'>Erstimpfung</text>
<text x='20' y='95' style='fill:#007700;font-size:14;'>Vollständige Impfung</text>
<text x='20' y='110' style='fill:#2222AA;font-size:14;'>Aktive Infektionen</text>
<text x='20' y='125' style='fill:#FF6600;font-size:14;'>Genesene</text>
<text x='20' y='140' style='fill:#AA2222;font-size:14;'>Todesfälle</text>
</g>\n";

echo "</svg>\n";


// Diagramm 4

echo "<!-- Differential -->\n\n";
echo "<h3>Veränderung der Infektionsrate (bezogen auf den 14-Tage-Mittelwert)</h3>\n";

include ("./includes/zeitreihe_differential.php");   # Modul Differential


// der Fußteil

include ("./includes/footer.php");

?>

zeitreihen_diagramme2.php


zeitreihen_diagramme3.php


zeitreihen_diagramme_wochensumme.php

<?php

include ("./includes/header.php");

$s = 15;                                                                 # Streckung der Werte

$land_akt = $laenderverweis;


$neues_array = filter_montag(); 

// der Inhalt

$x2_offset = 210;

$x_offset = 80;
$diagramm_laenge = count($neues_array) * $s;
$svg_laenge = $diagramm_laenge + $x_offset + $x2_offset;                # Länge der SVG-Datei
$svg_hoehe = 500;                                                       # Höhe der SVG-Datei

$offset_legende = $diagramm_laenge + $x_offset + 20;

# Maximum ermitteln
$max_f = max(array_column($neues_array, 38)) * 1.05; # Faelle
$max_t = max(array_column($neues_array, 44)) * 1.05; # Tote
$max_i = max(array_column($neues_array, 56)) * 1.05; # Impfungen

# Faktoren für die Skalierung ermitteln
$FI = $max_i / $max_f;

$FI_stellen = floor(log10($FI));
$FI_ziffer1 = str_split($FI)[0];

$faktor_impfungen = ($FI_ziffer1 + 1) * pow(10, $FI_stellen);

# wenn der Faktor 0 ist auf Standard-Wert setzen
if ($faktor_impfungen == 0) {$faktor_impfungen = 25;}

$FT = $max_f / $max_t;

if ( $FT > 100 ) {
 $faktor_tote = floor($FT - ($FT % 100)) / 2;
} else {
 $faktor_tote = floor($FT - ($FT % 10)) / 2;
}

if ($faktor_tote == 0) {$faktor_tote = 25;}

#echo "<p>max_f: $max_f max_t: $max_t FT: $FT - Stellen: $FT_stellen - 1. Ziffer: $FT_ziffer1 - $FT2 - $FT2i</p>";

echo "<h2>Wochensummen seit Beginn der Pandemie für " . $liste_laender_iso_de["$laenderverweis"] . "</h2>\n";

 // Neuinfektionen

echo "<h3>Neuinfektionen und Todesfälle</h3>\n";

echo "<svg id='svg_fl' width='" . ($svg_laenge) . "' height='500'>\n";

echo "<g id='plot1' transform='translate(" . $x_offset . ",0)'>\n";

#x-Achse unten
echo "<line x1='0' y1='400' x2='" . $diagramm_laenge . "' y2='400' style='stroke:#000000; stroke-width:2'/>\n";

$z = 0;

$wert_i_tmp = 0;

foreach ( $neues_array as $datensatz ) {
 $wert_f = floatval($datensatz[38]);                  # Fälle (ppm) als float
 $wert_t = floatval($datensatz[44]) * $faktor_tote;   # Tote
 $wert_i = floatval($datensatz[56]) / $faktor_impfungen;

 echo "<line x1='" . ( $z * $s + 2 ) . "' y1='400' x2='" . ( $z * $s + 2 ) . "' y2='" . round((400 - 400 * $wert_f / $max_f), 1) . "' class='l_f' style='stroke-width:10' />\n";                     # Linie zeichnen (Fälle)
 echo "<line x1='" . ( $z * $s + 2 ) . "' y1='400' x2='" . ( $z * $s + 2 ) . "' y2='" . round((400 - 400 * $wert_t / $max_f), 1) . "' style='stroke:#FF6666BB; stroke-width:10' />\n";                     # Linie zeichnen (Tote)

if ( $wert_i == 0 && $wert_i_tmp == 0 ) {} else {

 echo "<line x1='" . $z_tmp . "' y1='" . round((400 - 400 * $wert_i_tmp / $max_f ), 1) . "' x2='" . ( $z * $s ) . "' y2='" . round((400 - 400 * $wert_i / $max_f ), 1) . "' style='stroke:#22AA22DD; stroke-width:5'/>\n";             # Linie zeichnen (Impfungen)

}

 $z_tmp = $z * $s;
 $wert_i_tmp = $wert_i;

  // Datum

 echo "<text class='datum3' x='" . ($z * $s + 2 ) . "' y='410' style='fill:#000000;' transform='rotate(80," . ($z * $s + 2 ) . ",410)'>KW " . date("W 'y", strtotime($datensatz[3])) . "</text>\n";  # Datum zeichnen, um 90 ° im UZS gedreht
 echo "<line x1='" . ($z * $s + 3 ) . "' y1='400' x2='" . ($z * $s + 3 ) . "' y2='405' style='stroke:#000000;' />\n";                                                             # Skalenstrich zeichnen


 $index = $x;
 $z++;
}

// Skalierung

$max_f_gerundet = intval(round($max_f));                                  # Maximum abrunden
$laenge = strlen(strval($max_f_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_f_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile = $zahl1;                                             #
$interval_skala = pow(10, ($laenge - 1));                                 # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1
                                                                          # alternativ: interval_skala=ceil(log10($zahl);
// Hauptlinien

for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 echo "<line x1='0' y1='" . round((400 - 400 * $a * $interval_skala / $max_f ), 1) . "' x2='" . $diagramm_laenge . "' y2='" . round((400 - 400 * $a * $interval_skala / $max_f), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round((405 - 400 * $a * $interval_skala / $max_f), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . $a * $interval_skala . "</text>\n";
 echo "<text x='-2' y='" . (round((405 - 400 * $a * $interval_skala / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . $a * $interval_skala / $faktor_tote . "</text>\n";
 echo "<text x='-2' y='" . (round((405 - 400 * $a * $interval_skala / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . $a * $interval_skala * $faktor_impfungen . "</text>\n";

// Hilflinien

 if ( $anzahl_skalenteile < 3 ){                                          # wenn es weniger als 3 Skalenstriche geben würde
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f ) . "' style='stroke:#555555; stroke-width:1'/>\n";

  echo "<text x='-2' y='" . round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) / $faktor_tote . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) * $faktor_impfungen . "</text>\n";

  echo "<text x='-2' y='" . round((405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f ), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . ( $a * $interval_skala + $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . ( $a * $interval_skala + $interval_skala / 2 ) / $faktor_tote . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . ( $a * $interval_skala + $interval_skala / 2 ) * $faktor_impfungen . "</text>\n";
  
 }
}

echo "<text x='" . ( 12 - $x_offset ) . "' y='300' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",300)'>Je Million Einwohner</text>\n";

echo "</g>\n";

// Legende1
echo "\n<g id='legende1' transform='translate(" .  $offset_legende . ",50)'>
<rect x='0' y='40' rx='8' ry='8' width='170' height='95' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
<text x='20' y='60' style='fill:#000000'>Legende</text>
<text x='30' y='80' style='fill:#6666FF'>Neuinfektionen</text>
<text x='30' y='100' style='fill:#FF6666'>Todesfälle</text>
<text x='30' y='120' style='fill:#22AA22'>Impfungen</text>
</g>\n";

echo "</svg>\n\n";

// der Fußteil

include ("./includes/footer.php");

?>

zeitreihen_diagramme_monatssumme.php

<?php

// Was ändert sich? Länge der Grafik, Breite der Linien, Streckung -> Faktor

include ("./includes/header.php");

# Streckung der Werte
$s = 40;

$land_akt = $laenderverweis;

$neues_array = filter_monat();

// der Inhalt

$x2_offset = 210;

$x_offset = 80;
$diagramm_laenge = count($neues_array) * $s;
$svg_laenge = $diagramm_laenge + $x_offset + $x2_offset;                 # Länge der SVG-Datei
$svg_hoehe = 500;                                                        # Höhe der SVG-Datei

$offset_legende = $diagramm_laenge + $x_offset + 20;

# Maximum ermitteln
$max_f = max(array_column($neues_array, 40)) * 1.05; # Faelle
$max_t = max(array_column($neues_array, 46)) * 1.05; # Tote
$max_i = max(array_column($neues_array, 57)) * 1.05; # Impfungen

# Faktoren für die Skalierung ermitteln
$FI = $max_i / $max_f;

if ( $FI < 10 ) {
 $faktor_impfungen = ceil($FI);
} else {
 $faktor_impfungen = ceil($FI - ($FI % 10));
}


# wenn der Faktor 0 ist auf Standard-Wert setzen
if ($faktor_impfungen == 0) {$faktor_impfungen = 25;}

#echo "<p>max_f: $max_f max_i: $max_i FI: $FI - Stellen: $FI_stellen - 1. Ziffer: $FI_ziffer1 - $faktor_impfungen</p>";

$FT = $max_f / $max_t;

if ( $FT > 100 ) {
 $faktor_tote = floor($FT - ($FT % 100)) / 2;
} else {
 $faktor_tote = floor($FT - ($FT % 10)) / 2;
}

if ($faktor_tote == 0) {$faktor_tote = 25;}

echo "<h2>Monatssummen für " . $liste_laender_iso_de["$laenderverweis"] . "</h2>\n";

 // Neuinfektionen

echo "<h3>Neuinfektionen, Todesfälle und Impfungen</h3>\n";

echo "<svg id='svg_fl' width='" . ($svg_laenge) . "' height='500'>\n";

echo "<g id='plot1' transform='translate(" . $x_offset . ",0)'>\n";

echo "<line x1='0' y1='400' x2='" . $diagramm_laenge . "' y2='400' style='stroke:#000000; stroke-width:2'/>\n";        #x-Achse unten


$z = 0;

$wert_i_tmp = 0;

foreach ( $neues_array as $datensatz ) {
 $wert_f = floatval($datensatz[40]);       # Anzahl Fälle (ppm) als float
 $wert_t = floatval($datensatz[46]) * $faktor_tote;  # Anzahl Tote (ppm) als float*10
 $wert_i = floatval($datensatz[57]) / $faktor_impfungen / 3;  # Impfungen

 echo "<line x1='" . ( $z * $s + 5 ) . "' y1='400' x2='" . ( $z * $s + 5 ) . "' y2='" . round(( 400 - 400 * $wert_f / $max_f ), 1) . "' style='stroke:#6666FF; stroke-width:39' />\n";                     # Linie zeichnen (Fälle)
 echo "<line x1='" . ( $z * $s + 5 ) . "' y1='400' x2='" . ( $z * $s + 5 ) . "' y2='" . round(( 400 - 400 * $wert_t / $max_f ), 1) . "' style='stroke:#FF6666AA; stroke-width:39' />\n";                     # Linie zeichnen (Tote)

if ( $wert_i == 0 && $wert_i_tmp == 0 ) {} else {

 echo "<line x1='" . $z_tmp . "' y1='" . round(( 400 - 400 * $wert_i_tmp / $max_f ), 1) . "' x2='" . ( $z * $s + 2 ) . "' y2='" . round((400 - 400 * $wert_i / $max_f ), 1) . "' style='stroke:#22AA22DD; stroke-width:10'/>\n";             # Linie zeichnen (Impfungen)

}
 $z_tmp = $z * $s + 2;
 $wert_i_tmp = $wert_i;

// Datum

 # Datum zeichnen, um 90 ° im UZS gedreht
 echo "<text class='datum6' x='" . ( $z * $s ) . "' y='410' style='fill:#000000;' transform='rotate(70," . ( $z * $s ) . ",410)'>" . date("M y", strtotime($datensatz[3])) . "</text>\n";
 # Skalenstrich zeichnen
 echo "<line x1='" . ( $z * $s + 4 ) . "' y1='400' x2='" . ( $z * $s + 4 ) . "' y2='405' style='stroke:#000000;' />\n";

 $index = $x;
 $z++;
}

// Skalierung

# Maximum abrunden
$max_f_gerundet = intval(round($max_f));
# Anzahl Dezimalstellen ermitteln
$laenge = strlen(strval($max_f_gerundet));
# Erste Ziffer ermitteln
$zahl1 = substr($max_f_gerundet, 0, 1);

$anzahl_skalenteile = $zahl1;

# Interval der Hauptlinen = 10 hoch Dezimalstellen - 1
# alternativ: interval_skala=ceil(log10($zahl);
$interval_skala = pow(10, ($laenge - 1));    

                             
# Hauptlinien zeichnen
for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 echo "<line x1='0' y1='" . round((400 - 400 * $a * $interval_skala / $max_f ), 1) . "' x2='" . $diagramm_laenge . "' y2='" . round((400 - 400 * $a * $interval_skala / $max_f), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";  #x-Achse Kante
 echo "<text x='-2' y='" . round((405 - 400 * $a * $interval_skala / $max_f), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . $a * $interval_skala . "</text>\n";
 echo "<text x='-2' y='" . (round((405 - 400 * $a * $interval_skala / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . $a * $interval_skala / $faktor_tote . "</text>\n";
 echo "<text x='-2' y='" . (round((405 - 400 * $a * $interval_skala / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . $a * $interval_skala * $faktor_impfungen . "</text>\n";

                                                                          # Hilflinien zeichnen
 if ( $anzahl_skalenteile < 3 ){                                          # wenn es weniger als 3 Skalenstriche geben würde
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ) . "' style='stroke:#555555; stroke-width:1'/>\n";  #x-Achse Kante
  echo "<text x='-2' y='" . round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f ), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) / $faktor_tote . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) * $faktor_impfungen . "</text>\n";
  
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 4 ) / $max_f ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 4 ) / $max_f ) . "' style='stroke:#555555; stroke-width:1'/>\n";  #x-Achse Kante
  echo "<text x='-2' y='" . round((405 - 400 * ( $a * $interval_skala - $interval_skala / 4 ) / $max_f ), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 4 ) . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 4 ) / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 4 ) / $faktor_tote . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 4 ) / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 4 ) * $faktor_impfungen . "</text>\n";
  
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 4 ) / $max_f ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 4 ) / $max_f ) . "' style='stroke:#555555; stroke-width:1'/>\n";  #x-Achse Kante
  echo "<text x='-2' y='" . round((405 - 400 * ( $a * $interval_skala + $interval_skala / 4 ) / $max_f ), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . ( $a * $interval_skala + $interval_skala / 4 ) . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala + $interval_skala / 4 ) / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . ( $a * $interval_skala + $interval_skala / 4 ) / $faktor_tote . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala + $interval_skala / 4 ) / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . ( $a * $interval_skala + $interval_skala / 4 ) * $faktor_impfungen . "</text>\n";

  
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 4 * 3 ) / $max_f ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 4 * 3 ) / $max_f ) . "' style='stroke:#555555; stroke-width:1'/>\n";  #x-Achse Kante
  echo "<text x='-2' y='" . round((405 - 400 * ( $a * $interval_skala - $interval_skala / 4 * 3 ) / $max_f ), 1) . "' text-anchor='end' style='fill:#0000FF;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 4 * 3 ) . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 4 * 3 ) / $max_f), 1) + 12) . "' text-anchor='end' style='fill:#FF0000;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 4 * 3 ) / $faktor_tote . "</text>\n";
  echo "<text x='-2' y='" . (round((405 - 400 * ( $a * $interval_skala - $interval_skala / 4 * 3 ) / $max_f), 1) + 24) . "' text-anchor='end' style='fill:#22AA22;font-size:80%;'>" . ( $a * $interval_skala - $interval_skala / 4 * 3 ) * $faktor_impfungen . "</text>\n";
  
 }
}

echo "<text x='" . ( 12 - $x_offset ) . "' y='300' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",300)'>Je Million Einwohner</text>\n";

echo "</g>\n";

// Legende1
echo "\n<g id='legende1' transform='translate(" .  $offset_legende . ",50)'>
<rect x='0' y='40' rx='8' ry='8' width='170' height='100' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
<text x='20' y='60' style='fill:#000000'>Legende</text>
<text x='30' y='80' style='fill:#0000FF'>Neuinfektionen</text>
<text x='30' y='100' style='fill:#ff0000'>Todesfälle</text>
<text x='30' y='120' style='fill:#22AA22'>Impfungen</text>
</g>\n";

echo "</svg>\n\n";

// der Fußteil

include ("./includes/footer.php");

?>

zeitreihen_diagramme_vergleich.php

<?php

$vis = htmlspecialchars($_GET['vvis']);

$faelle_tmp = 0;
$tote_tmp = 0;

# Kopfteil
include ("./includes/header.php");

# Faktor der Vergrößerung
$faktor = 3;

# Streckung der Werte
$s = 2;

# Faktor für die Skalierung von Impfungen zu Infektionen
$faktor_impfungen = 40;

# Arrays mit ISO-Codes der anzuziegenden Länder
$laendervergleich[0] = array ("DEU","GBR","FRA","ITA","USA");
$laendervergleich[1] = array ("OWID_AFR","OWID_ASI","OWID_EUR","OWID_NAM","OWID_SAM","OWID_OCE","OWID_WRL");
$laendervergleich[2] = array ("ALB","AUT","BEL","BGR","BIH","BLR","CHE","CYP","CZE","DEU","DNK","ESP","EST","FIN","FRA","GBR","GIB","GRC","HRV","HUN","IRL","ISL","ITA","LIE","LTU","LUX","LVA","MDA","MKD","MLT","MNE","NLD","NOR","OWID_KOS","POL","PRT","ROU","RUS","SMR","SRB","SVK","SVN","SWE","UKR");
$laendervergleich[3] = array ("ABW","AIA","ATG","BES","BHS","BLZ","BMU","BRB","CAN","CRI","CUB","CUW","CYM","DMA","DOM","GRD","GRL","GTM","HND","HTI","JAM","KNA","LCA","MEX","MSR","NIC","PAN","SLV","SPM","SXM","TCA","TTO","USA","VCT","VGB");
$laendervergleich[4] = array ("AGO","BDI","BEN","BFA","BWA","CAF","CIV","CMR","COD","COG","COM","CPV","DJI","DZA","EGY","ERI","ETH","GAB","GHA","GIN","GMB","GNB","GNQ","KEN","LBR","LBY","LSO","MAR","MDG","MLI","MOZ","MRT","MUS","MWI","NAM","NER","NGA","RWA","SDN","SEN","SHN","SLE","SOM","SSD","STP","SWZ","SYC","TCD","TGO","TUN","TZA","UGA","ZAF","ZMB","ZWE");
$laendervergleich[5] = array ("AFG","ARE","ARM","AZE","BGD","BHR","BRN","BTN","CHN","GEO","HKG","IDN","IND","IRN","IRQ","ISR","JOR","JPN","KAZ","KGZ","KHM","KOR","KWT","LAO","LBN","LKA","MAC","MDV","MMR","MNG","MYS","NPL","OMN","PAK","PHL","PSE","QAT","SAU","SGP","SYR","THA","TJK","TLS","TUR","TWN","UZB","VNM","YEM");
$laendervergleich[6] = array ("AUS","FJI","NCL","NZL","PNG","PYF");
$laendervergleich[7] = array ("ARG","BOL","BRA","CHL","COL","ECU","GUY","PER","PRY","SUR","URY","VEN");
# -> Vergleich äller Länder eines Kontinents (mit mehr als X Mio Einwohnern)s


echo "<h2>Verlauf seit Beginn der Pandemie</h2>\n";
echo "<table border='0'>";
echo "<tr>
<th></th>
<th><h3>Neuinfektionen, Todesfälle und Impfungen (Infektionsrate, Sterberate, Impfrate)</h3></th>
<th><h3>Aktive Infektionen</h3></th>
<th><h3>Aktive Infektionen, Genesene und Todesfälle (Summe = Gesamtinfektionen)</h3></th>
<th><h3>Gesamtinfektionen, Todesfälle und Impfungen im Vergleich</h3></th>
<th><h3>Lineare Regression (8 Wochen)</h3></th>
</tr>
<tr><td>";


foreach ( $laendervergleich[$vis] as $land_akt ) {

# Land filtern
$neues_array = filter_land();

// der Inhalt

$x_offset = 80;                                             # linker Rand
$svg_laenge = count($neues_array) * $s + $x_offset + 10;    # Länge der SVG-Datei
$svg_hoehe = 500;                                           # Höhe der SVG-Datei

# Maximum ermitteln (Fälle)
$werte_f = array_column($neues_array, 42);      # Wertespalte extrahieren
$max_f = max($werte_f) * 1.05;

# Maximum ermitteln (Fälle kumuliert)
$werte_f_ges = array_column($neues_array, 8);   # Wertespalten extrahieren
$max_f_ges = max($werte_f_ges);

# Maximum ermitteln (Genesene)
$werte_g = array_column($neues_array, 54);      # Wertespalte extrahieren
$max_g = max($werte_g) / 2.5;

echo "<h2><a href='zeitreihen_diagramme.php?vland=" . $land_akt . "&vseite=zeitreihen_diagramme'>" . $liste_laender_iso_de["$land_akt"] . "</a></h2>\n";

echo "</td><td>";

// Neuinfektionen


echo "<svg width='" . $svg_laenge / $faktor . "' height='" . $svg_hoehe / $faktor . "'>\n";

include ("./includes/zeitreihe_neuinfektionen_gesamt.php");


echo "</svg>\n\n";

echo "</td><td>";

// aktive Infektionen

echo "<!-- aktive Infektionen -->\n\n";
echo "<svg width='" . $svg_laenge / $faktor . "' height='" . $svg_hoehe / $faktor . "'>\n";
echo "<svg width='$svg_laenge' height='$svg_hoehe' transform='scale(" . 1 / $faktor . ")'>\n";
echo "<g id='plot2' transform='translate($x_offset,0)'>\n";
echo "<line x1='0' y1='400' x2='" . $z * 2 . "' y2='400' style='stroke-width:2'/>\n";  #x-Achse unten
echo "<g id='plot2' transform='translate(0,400)'>\n";
echo "<g style='stroke-width:2;'>";

$z = 0;

foreach ( $neues_array as $datensatz ) {
 $wert_f = round((-400 * floatval($datensatz[8]) / $max_g), 1);     # Gesamtinfektionen / ppm
 $wert_t = round((-400 * floatval($datensatz[10]) / $max_g), 1);    # Tote
 $wert_g = round((-400 * floatval($datensatz[54]) / $max_g), 1);    # Genesene (Infektionen vor 14 Tagen - Tote)
 $wert_a = $wert_f - $wert_g;                                 # aktive Infektionen

 $pos_x = $z * $s;

 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_a' class='l_gf'/>\n";        # aktive Infektionen

// Datum

 if ( substr($datensatz[3], 8, 2) == "01" ){      # Wenn die letzten beiden Zeichen des Datumswertes "01" sind
  echo "<text x='" . ( $z * 2 - 3 ) . "' y='10' transform='rotate(70," . ( $z * 2 - 3 ) . ",10)'>" . date("M y", strtotime($datensatz[3])) . "</text>\n";   # Datum zeichnen, um 90 ° im UZS gedreht
  echo "<line x1='" . $z * 2 . "' y1='0' x2='" . $z * 2 . "' y2='5' />\n";   # Skalenstrich zeichnen
 }
 $z++;
}

echo "</g>";
echo "</g>";

// Skalierung

$max_g_gerundet = intval(round($max_g));                              # Maximum abrunden
$laenge = strlen(strval($max_g_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_g_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile=$zahl1;
$interval_skala=pow(10, ($laenge - 1));                                   # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1

// Hauptlinien

for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 echo "<line x1='0' y1='" . round((400 - 400 * $a * $interval_skala / $max_g), 1) . "' x2='$svg_laenge' y2='" . round((400 - 400 * $a * $interval_skala / $max_g), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round((405 - 400 * $a * $interval_skala / $max_g), 1) . "' text-anchor='end' style='fill:#000000;'>" . number_format($a * $interval_skala, 0,",",".") . "</text>\n";

// Hilflinien

 if ( $anzahl_skalenteile < 3 ){                                          # wenn es weniger als 3 Hauptlinien
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_g ) . "' text-anchor='end' x2='$svg_laenge' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_g ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<text x='-2' y='" . ( 405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_g ) . "' text-anchor='end' style='fill:#000000'>" . number_format(($a * $interval_skala - $interval_skala / 2), 0,",",".") . "</text>\n";
 }
}

echo "<text x='" . ( 12 - $x_offset ) . "' y='300' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",300)'>Je Million Einwohner</text>\n";

echo "</g>";

//Legende2

echo "
<g id='legende2' transform='translate(" . ( $x_offset + 50 ) . ",0)'>
<rect x='0' y='40' rx='8' ry='8' width='200' height='85' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
<text x='10' y='60' class='legende'>Legende</text>
<text x='20' y='80' style='fill:#000088;'>Aktive Infektionen</text>
<text x='20' y='95' style='fill:#FF6600;'>Genesene</text>
<text x='20' y='110' style='fill:#770000;'>Todesfälle</text>
</g>\n";

echo "</svg>\n</svg>\n";

echo "</td><td>";


echo "<svg width='" . $svg_laenge / $faktor . "' height='" . $svg_hoehe / $faktor . "'>\n";

include ("./includes/zeitreihe_gesamtinfektionen.php");


echo "</svg>\n\n";


echo "</td><td>"; 

// Gesamtinfektionen2

echo "<!-- Gesamtinfektionen 2 -->\n\n";
echo "<svg width='" . $svg_laenge / $faktor . "' height='" . $svg_hoehe / $faktor . "'>\n";
echo "<svg width='$svg_laenge' height='$svg_hoehe' transform='scale(" . 1 / $faktor . ")'>\n";
echo "<g id='plot3' transform='translate($x_offset,0)'>\n";
echo "<line x1='0' y1='400' x2='" . $z * 2 . "' y2='400' style='stroke-width:2'/>\n";  # x-Achse unten
echo "<g id='plot2' transform='translate(0,400)'>\n";
echo "<g style='stroke-width:1;'>";

$z = 0;

$max_f_ges = 100000;

foreach ( $neues_array as $datensatz ) {
 $wert_f = round((-400 * floatval($datensatz[8] / 10) / $max_f_ges), 1);        # Infektionen
 $wert_g = round((-400 * floatval($datensatz[54] / 10) / $max_f_ges), 1);       # Genesene
 $wert_t = round((-400 * floatval($datensatz[10] / 10) / $max_f_ges), 1);       # Tote
 $wert_i1 = round((-400 * floatval($datensatz[21] * 1000) / $max_f_ges), 1);    # 1. Impfung
 $wert_i2 = round((-400 * floatval($datensatz[22] * 1000) / $max_f_ges), 1);    # Vollständige Impfung
      
 $pos_x = $z * $s + 3;
 $pos_x_2 = $pos_x + 1;
                                                                                                                                                                           
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_f' class='l_gf'/>\n";      # Linie zeichnen (Fälle)
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_g' class='l_gen'/>\n";     # Linie zeichnen (Genesene)
 echo "<line x1='$pos_x' y1='0' x2='$pos_x' y2='$wert_t' class='l_gt'/>\n";      # Linie zeichnen (Tote)
 echo "<line x1='$pos_x_2' y1='0' x2='$pos_x_2' y2='$wert_i1' class='l_i'/>\n";  # Linie zeichnen (1. Impfung)
 echo "<line x1='$pos_x_2' y1='0' x2='$pos_x_2' y2='$wert_i2' class='l_gi'/>\n"; # Linie zeichnen (vollständig geimpft)

// Datum

 if ( substr($datensatz[3], 8, 2) == "01" ){                                          # Wenn die letzten beiden Zeichen des Datumswertes "01" sind
  echo "<text x='" . ( $z * 2 - 3 ) . "' y='10' transform='rotate(70," . ( $z * 2 - 3 ) . ",10)'>" . date("M y", strtotime($datensatz[3])) . "</text>\n";   # Datum zeichnen, um 90 ° im UZS gedreht
  echo "<line x1='" . $z * 2 . "' y1='0' x2='" . $z * 2 . "' y2='5' />\n";                                             # Skalenstrich zeichnen
 }

 $z++;
}

echo "</g>";

// Skalierung

$max_f_gerundet = intval(round($max_f_ges));                              # Maximum abrunden
$laenge = strlen(strval($max_f_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_f_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile = $zahl1;
$interval_skala = pow(10, ($laenge - 1));                                   # Interval der Hauptlinen = 10 hoch Dezimalstellen - 1

// Hauptlinien

for ( $a = 1; $a <= 10; $a++ ) {
 echo "<line x1='0' y1='" . round(( -400 * $a / 10 * $interval_skala / $max_f_ges), 1) . "' x2='$svg_laenge' y2='" . round(( -400 * $a / 10 * $interval_skala / $max_f_ges), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round(( 5 - 400 * $a / 10 * $interval_skala / $max_f_ges), 1) . "' text-anchor='end' style='fill:#000000;'>" . number_format($a * 10 , 0,",",".") . " %</text>\n";
}

echo "</g>\n";

//Legende3

#echo "
#<g id='legende3' transform='translate(" . ( $x_offset + 50 ) . ",0)'>
#<rect x='0' y='40' rx='8' ry='8' width='200' height='115' style='stroke:#000000; fill:#FFFFFF; stroke-width:2; fill-opacity:0.8' />
#<text x='10' y='60'>Legende</text>
#<text x='20' y='80' style='fill:#22AA22;font-size:14;'>Erstimpfung</text>
#<text x='20' y='95' style='fill:#007700;font-size:14;'>Vollständige Impfung</text>
#<text x='20' y='110' style='fill:#2222AA;font-size:14;'>Aktive Infektionen</text>
#<text x='20' y='125' style='fill:#FF6600;font-size:14;'>Genesene</text>
#<text x='20' y='140' style='fill:#AA2222;font-size:14;'>Todesfälle</text>
#</g>\n";

echo "</svg>\n</svg>\n";

echo "</td><td>"; 

#echo "<svg width='" . $svg_laenge / $faktor . "' height='" . $svg_hoehe / $faktor . "'>\n";
#include ("./includes/zeitreihe_differential.php");
#echo "</svg>\n\n";
#echo "</td><td>";

// Regressionsgeraden

#$neues_array2 = array_filter($array,"test_land");                           # Land filtern
$neues_array2 = filter_datum_land(56);                  # Datum filtern (letzte 4 Wochen)

$werte_f2 = array_column($neues_array2, 9);      # Wertespalte extrahieren
$max_f2 = max($werte_f2) * 1.01;

$max_f2_gerundet = intval(round($max_f2));                                  # Maximum abrunden
$laenge = strlen(strval($max_f2_gerundet));                                # Anzahl Dezimalstellen ermitteln
$zahl1 = substr($max_f2_gerundet, 0, 1);                                   # Erste Ziffer ermitteln

$anzahl_skalenteile = $zahl1;                                             #
$interval_skala = pow(10, ($laenge - 1)); 

$x_offset = 80;
$x2_offset = 210;

$s = 10;
$diagramm_laenge = count($neues_array2) * $s;
$svg_laenge = $diagramm_laenge + $x_offset + $x2_offset;                # Länge der SVG-Datei
$offset_legende = $diagramm_laenge + $x_offset + 20;

// Regression

$summe_xx = 0;
$summe_xy2_f = 0;
$summe_xy2_t = 0;
$sqr_f = 0;
$sqr_t = 0;
$sqt_f = 0;
$sqt_t = 0;

$summe_x = array_sum(range(1, 56));                                        # Summe der X-Werte (1 - 56)
$summe_y_f = array_sum(array_column($neues_array2, 9));                     # Summe der y-Werte (Fälle)
$summe_y_t = array_sum(array_column($neues_array2, 11));                    # Summe der y-Werte (Tote)

$x_quer = $summe_x / 56;                                                      # Mittelwert der X-Werte
$y_quer_f = $summe_y_f / 56;                                                  # Mittelwert der Y-Werte (Fälle)
$y_quer_t = $summe_y_t / 56;                                                  # Mittelwert der Y-Werte (Tote)

$xi=1;

foreach ($neues_array2 as $datensatz) {                                      # Für jeden Datensetz
 $yi_f = $datensatz[9];                                                     # Fälle (ppm)
 $yi_t = $datensatz[11];                                                    # Tote (ppm)
 $summe_xx += ( $xi - $xquer ) * ( $xi - $xquer );                         
 $summe_xy2_f += $xi * $yi_f;
 $summe_xy2_t += $xi * $yi_t;
 $xi++;
}

$anstieg_f = ($summe_xy2_f - 56 * $x_quer * $y_quer_f) / ($summe_xx - 56 * $x_quer * $x_quer);              # Berechnung des Regressionskoeffizienten für die Fälle
$anstieg_t = ($summe_xy2_t - 56 * $x_quer * $y_quer_t) / ($summe_xx - 56 * $x_quer * $x_quer);              # Berechnung des Regressionskoeffizienten für die Todefälle
$abschnitt_f = $y_quer_f - ( $anstieg_f * $x_quer );
$abschnitt_t = $y_quer_t - ( $anstieg_t * $x_quer );

// Determinationskoeffizient

$xi=1;

foreach ($neues_array2 as $datensatz) {
 $yi_f = $datensatz[9];
 $yi_t = $datensatz[11];
 
 $yi_f_erwartet = $xi * $anstieg_f + $abschnitt_f;
 $yi_t_erwartet = $xi * $anstieg_t + $abschnitt_t;

 $sqr_f += pow($yi_f - $yi_f_erwartet, 2);
 $sqr_t += pow($yi_t - $yi_t_erwartet, 2);
 $sqt_f += pow($yi_f - $y_quer, 2);
 $sqt_t += pow($yi_t - $y_quer, 2);
 $xi++;
}

$r2_f = 1 - $sqr_f / $sqt_f;
$r2_t = 1 - $sqr_t / $sqt_t;

echo "<svg width='" . ( $svg_laenge + 100 ) / $faktor . "' height='" . $svg_hoehe / $faktor . "'>\n";
echo "<svg id='svg_fl' width='" . ( $svg_laenge + 100 ) . "' height='$svg_hoehe' transform='scale(" . 1 / $faktor . ")'>\n";

echo "<g id='plot1' transform='translate(" . $x_offset . ",0)'>\n";

// Skalierung

echo "<line x1='0' y1='400' x2='" . $diagramm_laenge . "' y2='400' style='stroke:#000000; stroke-width:2'/>\n";    # x-Achse unten
                                                                                                                   # Hauptlinien zeichnen
for ( $a = 1; $a <= $anzahl_skalenteile; $a++ ) {
 echo "<line x1='0' y1='" . round(( 400 - 400 * $a * $interval_skala / $max_f2 ), 1) . "' x2='" . $diagramm_laenge . "' y2='" . round((400 - 400 * $a * $interval_skala / $max_f2), 1) . "' style='stroke:#555555; stroke-width:1'/>\n";
 echo "<text x='-2' y='" . round(( 405 - 400 * $a * $interval_skala / $max_f2 ), 1) . "' text-anchor='end' style='fill:#6666FF;font-size:90%;'>" . $a * $interval_skala . "</text>\n";
 echo "<text x='-2' y='" . round(( 405 - 400 * $a * $interval_skala / $max_f2 ) + 15, 1) . "' text-anchor='end' style='fill:#FF6666;font-size:90%;'>" . $a * $interval_skala / 10 . "</text>\n";

                                                                                                                    # Hilflinien zeichnen
 if ( $anzahl_skalenteile < 3 ){                                                                                    # wenn es weniger als 3 Skalenstriche geben würde
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f2 ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f2 ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<text x='-2' y='" . round(( 405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f2 ), 1) . "' text-anchor='end' style='fill:#6666FF;font-size:90%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . round(( 405 - 400 * ( $a * $interval_skala - $interval_skala / 2 ) / $max_f2 ) + 15, 1) . "' text-anchor='end' style='fill:#FF6666;font-size:90%;'>" . ( $a * $interval_skala - $interval_skala / 2 ) / 10 . "</text>\n";
  
  echo "<line x1='0' y1='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f2 ) . "' x2='" . $diagramm_laenge . "' y2='" . ( 400 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f2 ) . "' style='stroke:#555555; stroke-width:1'/>\n";
  echo "<text x='-2' y='" . round(( 405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f2 ), 1) . "' text-anchor='end' style='fill:#6666FF;font-size:90%;'>" . ( $a * $interval_skala + $interval_skala / 2 ) . "</text>\n";
  echo "<text x='-2' y='" . round(( 405 - 400 * ( $a * $interval_skala + $interval_skala / 2 ) / $max_f2 ) + 15, 1) . "' text-anchor='end' style='fill:#FF6666;font-size:90%;'>" . ( $a * $interval_skala + $interval_skala / 2 ) / 10 . "</text>\n";
 }
}

echo "<text x='" . ( 12 - $x_offset ) . "' y='300' style='fill:#000000' transform='rotate(-90," . ( 12 - $x_offset ) . ",300)'>Je Million Einwohner</text>\n";

$z = 0;

reset($neues_array2);
$ar_tmp = current($neues_array2);

$wert_f3_tmp = round((400 - 400 * (floatval($ar_tmp[42])) / $max_f2), 1);
$wert_t3_tmp = round((400 - 400 * (floatval($ar_tmp[48]) * 10) / $max_f2), 1);

$z_tmp = 0;

foreach ( $neues_array2 as $datensatz ) {
 $wert_f = floatval($datensatz[9]);                                                   # Anzahl Fälle (ppm) als float
 $wert_t = floatval($datensatz[11]) * 10;                                             # Anzahl Tote (ppm) als float*10
 $wert_i = floatval($datensatz[19] / floatval($datensatz[23]) * 100000 / 2);          # Anzahl Impfungen

 $wert_f3 = round((400 - 400 * (floatval($datensatz[42])) / $max_f2), 1);                # Die Y-Koordniate ergibt sich aus der Höhe der Grafik minus Dem Anteil des Wertes am Maximalwert
 $wert_t3 = round((400 - 400 * (floatval($datensatz[48]) * 10) / $max_f2), 1);


 echo "<circle cx='" . ($z * $s + 3) . "' cy='" . round((400 - 400 * $wert_f / $max_f2), 1) . "' r='3' style='fill:#6666FF;' />\n";
 echo "<circle cx='" . ($z * $s + 10) . "' cy='" . round((400 - 400 * $wert_t / $max_f2), 1) . "' r='3' style='fill:#FF6666;' />\n";

 $z_tmp = $z * $s;
 $wert_f3_tmp = $wert_f3;
 $wert_t3_tmp = $wert_t3;

 // Datum

 echo "<text  class='datum3' x='" . ($z * $s + 3) . "' y='410' style='fill:#000000;' transform='rotate(90," . ($z * $s + 3) . ",410)'>" . date("d.M", strtotime($datensatz[3])) . "</text>\n";  # Datum zeichnen, um 90 ° im UZS gedreht
 echo "<line x1='" . ($z * $s + 7) . "' y1='400' x2='" . ($z * $s + 7) . "' y2='405' style='stroke:#000000;' />\n";                                                             # Skalenstrich zeichnen

 $index = $x;
 $z++;
}

// Regressionsgeraden

echo "<line x1='5' y1='" . round((400 - 400 * ($anstieg_f + $abschnitt_f) / $max_f2), 1) . "' x2='" . ($z * $s - 10) . "' y2='" . round((400 - 400 * ( 56 * $anstieg_f + $abschnitt_f ) / $max_f2), 1) .  "' style='stroke:#000066;stroke-width:3px;' />\n";
echo "<line x1='5' y1='" . round((400 - 400 * ($anstieg_t + $abschnitt_t) * 10 / $max_f2), 1) . "' x2='" . ($z * $s - 10) . "' y2='" . round((400 - 400 * ( 56 * $anstieg_t + $abschnitt_t ) * 10 / $max_f2), 1) .  "' style='stroke:#660000;stroke-width:3px;' />\n";

echo "</g>\n";

echo "<text x='" . $offset_legende . "' y='250' style='fill:#000066;'>Trendlinie: y = " . number_format($anstieg_f, 3, ",",".") . "x + " . number_format($abschnitt_f, 2, ",",".") . "</text>";
echo "<text x='" . ($offset_legende + 105) . "' y='270' style='fill:#000066;'>R² = " . number_format($r2_f, 4, ",",".") . "</text>";
echo "<text x='" . ($offset_legende + 105) . "' y='290' style='fill:#000066;'>R = " . number_format(sqrt($r2_f), 4, ",",".") . "</text>";

echo "<text x='" . $offset_legende . "' y='330' style='fill:#660000;'>Trendlinie: y = " . number_format($anstieg_t, 3, ",",".") . "x + " . number_format($abschnitt_t, 2, ",",".") . "</text>";
echo "<text x='" . ($offset_legende + 105) . "' y='350' style='fill:#660000;'>R² = " . number_format($r2_t, 4, ",",".") . "</text>";
echo "<text x='" . ($offset_legende + 105) . "' y='370' style='fill:#660000;'>R = " . number_format(sqrt($r2_t), 4, ",",".") . "</text>";

// Legende

#echo "\n<g id='legende2' transform='translate(" . $offset_legende . ",50)'>
#<rect x='0' y='35' rx='8' ry='8' width='170' height='80' style='stroke:#000000; fill:#FFEECC; stroke-width:2; fill-opacity:0.8' />
#<text x='20' y='60' style='fill:#000000'>Legende</text>
#<text x='30' y='80' style='fill:#0000FF'>Neuinfektionen</text>
#<text x='30' y='100' style='fill:#ff0000'>Todesfälle</text>
#</g>\n";

echo "</svg>\n</svg>\n";

echo "</td>"; 

echo "</tr>\n<tr><td>"; 
$s = 2;
}

echo "</td></tr>\n</table>";

// der Fußteil

include ("./includes/footer.php");

?>

heatmap.php

<?php

$vis = htmlspecialchars($_GET['vvis']);

# Kopfteil einbinden
include ("./includes/header.php");

# Schalter zum erzeugen von SVG-Output
$svg = False;


$svg_offset_x = 150;

# Array mit Darstellungsparametern 
$param_vis = array ( 
                    array (58, 100000, 10000, "0,255,0,", 99),                      # Impfungen
                    array (43, 2000, 750, "0,0,255,", 98),                          # Infektionen
                    array (49, 200, 75, "255,0,0,", 98),                            # Todesfälle
                    array (15, 2000, 10, "255,255,0,", 98),                         # Tests
                    array (52, 10000, 10000, array ("255,0,0,","0,255,0,"), 99),    # Trend 28 Tahe
                    array (50, 10000, 10000, array ("255,0,0,","0,255,0,"), 99)     # Trend 14 Tahe
                   );

$nr_spalte = $param_vis[$vis][0];                                   # darzustellende Wertespalte
#$kappwert = $param_vis[$vis][1];                                    # oberer Maximalwert
#$skalierung = $param_vis[$vis][2];                                  # Stufenzahl
$farbe = $param_vis[$vis][3];                                       # Farbe
$perzentil = $param_vis[$vis][4];                                   # Angabe des Bezugs-Perzentils

$regionen = array ("","Europe","North America","South America","Asia","Oceania","Africa");
$regionen_farben = array ("FFFFFF","0000FF","FF0000","00FF00","FF00FF","FFFF00","00FFFF");

# Anzahl der Tage ermitteln (für Länge der Zwichenzeile)
$anzahl_tage = count(array_unique(array_column($array, 3)));
$anzahl_tage = 750;
$leerzeile = "<tr style='background-color:#D3FFFF'><td colspan='" . $anzahl_tage . "'>.</td></tr>\n<tr style='background-color:#D3FFFF'><td colspan='" . $anzahl_tage . "'>.</td></tr>\n";

# Ausgabe
##########

echo "<h3>Heatmap für:" . $array[0][$nr_spalte] . "</h3>";
echo "<table style='font-size:20%;padding:0px;border-collapse:collapse;background-color:rgb(0,0,0);'>\n<thead>\n<tr>\n<th></th>\n";

if ( $svg ) {
 # Ausgabedatei öffnen
 $ausgabe = fopen("coronamap.svg","w");
 fwrite($ausgabe, "<svg width='3400' height='2060'>\n<defs>
  <style type='text/css'>
   <![CDATA[
    text {font-size:70%;}
   ]]>
  </style>
 </defs>\n");
 
 # schwarzer Hintergrund
 fwrite($ausgabe, "<rect x='0' y='0' width='3400' height='2065' fill='black' />\n");
}

$land_akt = "OWID_WRL";
$neues_array = array_reverse(filter_land());

#var_dump($neues_array);

# Datumszeile erzeugen
$abc = 1;
foreach ($neues_array as $datensatz) {
 echo "<th><div class='h_d'>" . date("j.n.", strtotime($datensatz[3])) . "</div></th>\n";
 if ($svg) { fwrite($ausgabe,"<text x='" . ( $abc * 6 + $svg_offset_x ) . "' y='20' fill='#FFFFFF' transform='rotate(-90," . ( $abc * 6 + $svg_offset_x ) . ",20)'>" . date("j.n.", strtotime($datensatz[3])) . "</text>\n"); }
 $abc = $abc + 1;
}

echo "</tr>\n</thead>\n<tbody>\n";

$z = 0;     # Zähler (Regionen)
$z2 = 1;    # Zähler (Zeilenfortschritt)
$c = 0;     # counter (Datenpunkte)

# Debugging
#$testregion="";                                                    

$ar_dbg = [];

# Für jeden Kontinent
foreach ($regionen as $testregion) {
 # Array auf Region filtern
 $array_regio = array_reverse(filter_region());  

 # Spalte mit ISO-Codes extrahieren            
 $spalte_iso = array_column($array_regio, 0);
 
 # Duplikate entfernen
 $spalte_iso = array_unique($spalte_iso);
 # sortieren
 sort($spalte_iso);
 
 $spalte_iso_2 = array_unique(array_column($array_regio, 0));
 sort($spalte_iso_2, SORT_LOCALE_STRING);

$ar_dbg[] = $spalte_iso_2;

 #array_shift($spalte_iso_2);

 foreach ($spalte_iso_2 as $land_akt) {                        # 
  $neues_array = array_reverse(filter_land());                 # Datensätze des Langes filtern
  $wertespalte = array_column($neues_array, $nr_spalte);            # Spalte mit den gewählten Werten extrahieren
  sort($wertespalte, SORT_NUMERIC);                                 # numerisch sortieren
  $perz[1] = $wertespalte[floor(count($wertespalte) * 0.01)];       # 1. Perzentil
  $perz[50] = $wertespalte[floor(count($wertespalte) * 0.5)];       # Median
  $perz[90] = $wertespalte[floor(count($wertespalte) * 0.9)];       # 9. Dezil
  $perz[95] = $wertespalte[floor(count($wertespalte) * 0.95)];      # 95. Perzentil
  $perz[98] = $wertespalte[floor(count($wertespalte) * 0.98)];      # 98. Perzentil
  $perz[99] = $wertespalte[floor(count($wertespalte) * 0.99)];      # 99. Perzentil
  $max = $wertespalte[count($wertespalte) - 1];                       # Höchster Wert
  
  if ($max != 0){
   $z2 = $z2 + 1;
   # Oberer Grenzwert für die farbige Skalierung
   $kappwert = $perz[$perzentil];
   $skalierung = $perz[$perzentil] * 2;
  
   if ( $nr_spalte == 52 or $nr_spalte == 50 ) {
    $kappwert2 = $perz[1];
    $skalierung = $perz[$perzentil];
   }

   if ( $land_akt == "OWID_WRL" ) { echo $leerzeile; $z2 = $z2 + 2; }
  
    echo "<tr>\n";
    
    $land = array_unique(array_column($neues_array, 25));
    
    # Zeilenbeschriftung (Ländername)
    echo "<td style='background-color:#" . $regionen_farben[$z] . ";'>" . $land[0] . "</td>\n";
    if ($svg) { fwrite($ausgabe, "<text class='hmt' x='$svg_offset_x' y='" . ( $z2 * 10 + 8 ) . "' fill='#" . $regionen_farben[$z] . "' text-anchor='end'>" . $land[0] . "</text>\n"); }

    # Zähler (Spaltenfortschritt)
    $z3 = 0;

    # für jedes Element von $neues_array
    foreach ($neues_array as $datensatz) { 

     # den darzustellenden Wert aus Spalte entnehmen
     $messwert = $datensatz[$nr_spalte];

     # Kappung
     if ( $messwert > $kappwert ) { $messwert = $kappwert; }
     elseif ( $messwert < $kappwert2 ) { $messwert = $kappwert2; }

     # eine Zelle mit nach Werten abgestufter Hintergrundfarbe erzeugen
     $transparenz = strval(abs(round(floatval($messwert)/$skalierung, 2)));
     $pos_x = $z3 * 6 + $svg_offset_x;
     $pos_y = $z2 * 10;
     if ( $nr_spalte != 52 and $nr_spalte != 50 ){
      $farbe_comp = $farbe . $transparenz;
      $c = $c + 1;
     } else {
      if ( $messwert > 0 ) {
       $farbe_comp = $param_vis[$vis][3][1] . $transparenz;
       $c = $c + 1;
      } else {
       $farbe_comp = $param_vis[$vis][3][0] . $transparenz;
       $c = $c + 1;
      }
      $z3 = $z3 + 1;
     }
     echo "<td style='background-color:rgb( $farbe_comp );'>.</td>\n";
     if ($svg) { fwrite($ausgabe, "<rect x='$pos_x' y='$pos_y' width='6' height='8' fill='rgb( $farbe_comp )'/>\n"); }
    }
    echo "</tr>\n";
   }
  }
  # nach der ersten Region (Kontinente)
 if ( $z == 0 ) { echo $leerzeile; $z2 = $z2 + 2; }

 $z = $z + 1;
}

echo "</tbody>\n</table><br>\n";

echo "<p>$c Datenpunkte</p>";

if ($svg) {
 fwrite($ausgabe, "</svg>\n");
 fclose($ausgabe);
}

# Fußteil einbinden
include ("./includes/footer.php");

?>

heatmap3.php

<?php

include ("./includes/header.php");                                  # Kopfteil einbinden

$svg = "0";                                                         # Schalter zum erzeugen von SVG-Output (1 = true, 0 = false))
$svg_offset_x = 150;
$svg_laenge = 3950;

$regionen = array ("","Europe","North America","South America","Asia","Oceania","Africa");
$regionen_farben = array ("FFFFFF","0000FF","FF0000","00FF00","FF00FF","FFFF00","00FFFF");

# Ausgabe
##########

echo "<h3>Heatmap für:" . $array[0][43] . " und " . $array[0][52] . "</h3>";
echo "<table style='font-size:20%;padding:0px;border-collapse:collapse;background-color:rgb(0,0,0);'>\n<thead>\n<tr>\n<th></th>\n";

if ( $svg == "1" ) {
 $ausgabe = fopen("coronamap.svg","w");                                                 # Ausgabedatei öffnen
 
# fwrite($ausgabe, "<html><body>\n");
 
 fwrite($ausgabe, "<svg width='$svg_laenge' height='2060'>\n<defs>
  <style type='text/css'>
   <![CDATA[
    text {font-size:70%;}
    .dat {fill:#ffffff;}
   ]]>
  </style>
 </defs>\n");

 
 fwrite($ausgabe, "<rect x='0' y='0' width='$svg_laenge' height='2065' fill='#000000' />\n");    # schwarzer Hintergrund
}

$reverse = array_reverse($array);                                                       # Array umkehren
$array = $reverse;

$land_akt = "OWID_WRL";
$neues_array = array_filter($array, "test_land");

# Anzahl der Tage ermitteln (für Länge der Zwichenzeile)
$anzahl_tage = count(array_unique(array_column($array, 3)));
$leerzeile = "<tr style='background-color:#D3FFFF'><td colspan='" . $anzahl_tage . "'>.</td></tr>\n<tr style='background-color:#D3FFFF'><td colspan='" . $anzahl_tage . "'>.</td></tr>\n";

# Datumszeile erzeugen
$abc = 1;
foreach ($neues_array as $datensatz) {
 echo "<th><div class='h_d'>" . date("j.n.", strtotime($datensatz[3])) . "</div></th>\n";
 if ($svg == "1") { fwrite($ausgabe,"<text class='dat' x='" . ( $abc * 6 + $svg_offset_x ) . "' y='20' transform='rotate(-90," . ( $abc * 6 + $svg_offset_x ) . ",20)'>" . date("j.n.", strtotime($datensatz[3])) . "</text>\n"); }
 $abc = $abc + 1;
}

echo "</tr>\n</thead>\n<tbody>\n";

$z = 0;     # Zähler (Regionen)
$z2 = 1;    # Zähler (Zeilenfortschritt)
$c = 0;     # counter (Datenpunkte)

#$testregion="";                                                    # Debugging
foreach ($regionen as $testregion) {                                # Für jeden Kontinent
 $array_regio = array_filter($array, "filter_region");              # Array auf Region filtern
 $spalte_iso = array_column($array_regio,0);                        # Spalte mit ISO-Codes extrahieren
 $spalte_iso = array_unique($spalte_iso);              		        # Duplikate entfernen
 sort($spalte_iso);                             # sortieren
 
 $spalte_laender_de = array_unique(array_column($array_regio, 25));
 sort($spalte_laender_de, SORT_LOCALE_STRING);

 array_shift($spalte_laender_de);

 foreach ($spalte_laender_de as $testland) {                        # 
  $neues_array = array_filter($array, "filter_land_de");                 # Datensätze des Langes filtern
  $wertespalte[0] = array_column($neues_array, 43);            # Spalte mit den gewählten Werten extrahieren
  $wertespalte[1] = array_column($neues_array, 52);            # Spalte mit den gewählten Werten extrahieren
  sort($wertespalte[0], SORT_NUMERIC);                                 # numerisch sortieren
  sort($wertespalte[1], SORT_NUMERIC);                                 # numerisch sortieren
  $perz[1][0] = $wertespalte[0][floor(count($wertespalte[0]) * 0.01)];       # 1. Perzentil
  $perz[98][0] = $wertespalte[0][floor(count($wertespalte[0]) * 0.98)];      # 98. Perzentil
  $perz[99][0] = $wertespalte[0][floor(count($wertespalte[0]) * 0.99)];      # 99. Perzentil
  $max[0] = $wertespalte[0][count($wertespalte[0])-1];                       # Höchster Wert
  
  $perz[1][1] = $wertespalte[1][floor(count($wertespalte[1]) * 0.01)];       # 1. Perzentil
  $perz[98][1] = $wertespalte[1][floor(count($wertespalte[1]) * 0.98)];      # 98. Perzentil
  $perz[99][1] = $wertespalte[1][floor(count($wertespalte[1]) * 0.99)];      # 99. Perzentil
  $max[1] = $wertespalte[1][count($wertespalte[1])-1];                       # Höchster Wert
  
  if ($max[0] != 0 or $max[1] != 0){
   $z2 = $z2 + 1;
   $kappwert[0] = $perz[98][0];                                   # Oberer Grenzwert für die farbige Skalierung
   $kappwert[1] = $perz[99][1];
   $skalierung[0] = $perz[98][0] * 2;
  
   $kappwert2[0] = $perz[1][0];
   $kappwert2[1] = $perz[1][1];
   $skalierung[1] = $perz[99][1];

   # vor der Welt-Zeile eine Leerzeile erzeugen
   if ( $testland == "Welt" ) { echo $leerzeile; $z2 = $z2 + 2; }
  
    echo "<tr>\n";
    
    $land = array_unique(array_column($neues_array, 25));
    
    # Zeilenbeschriftung (Ländername)
    echo "<td style='background-color:#" . $regionen_farben[$z] . ";'>" . $land[0] . "</td>\n";
    if ($svg == "1") { fwrite($ausgabe, "<text class='hmt' x='$svg_offset_x' y='" . ( $z2 * 10 + 8 ) . "' fill='#" . $regionen_farben[$z] . "' text-anchor='end'>" . html_entity_decode($land[0]) . "</text>\n"); }

    $z3 = 0;        # Zähler (Spaltenfortschritt)
    foreach ($neues_array as $datensatz) { 
     $messwert[0] = $datensatz[43];                              # den darzustellenden Wert aus Spalte entnehmen
     $messwert[1] = $datensatz[52];

     if ( $messwert[0] > $kappwert[0] ) { $messwert[0] = $kappwert[0]; } elseif ( $messwert[0] < $kappwert2[0] ) { $messwert[0] = $kappwert2[0]; }     # Kappung
     if ( $messwert[1] > $kappwert[1] ) { $messwert[1] = $kappwert[1]; } elseif ( $messwert[1] < $kappwert2[1] ) { $messwert[1] = $kappwert2[1]; }     # Kappung

     # eine Zelle mit nach Werten abgestufter Hintergrundfarbe erzeugen
     $pos_x = $z3 * 6 + $svg_offset_x;
     $pos_y = $z2 * 10;

     $farbe_b = strval(abs(round( 255 * floatval($messwert[0]) / $skalierung[0], 0)));
     $c = $c + 1;

      if ( $messwert[1] > 0 ) {
       $farbe_r = 0;
       $farbe_g = strval(abs(round( 255 * floatval($messwert[1]) / $skalierung[1], 0)));
      } else {
       $farbe_g = 0;
       $farbe_r = strval(abs(round( 255 * floatval($messwert[1]) / $skalierung[1], 0)));
      }
      $z3 = $z3 + 1;
     
     $farbe_comp = $farbe_r . "," . $farbe_g . "," . $farbe_b;
     echo "<td style='background-color:rgb( $farbe_comp );'>.</td>\n";
     if ( $svg == "1" ) { fwrite($ausgabe, "<rect x='$pos_x' y='$pos_y' width='6' height='8' fill='rgb( $farbe_comp )'/>\n"); }
    }
    echo "</tr>\n";
   }
  }
  # nach der ersten Region (Kontinente) eine Leerzeile erzeugen
 if ( $z == 0 ) { echo $leerzeile; $z2 = $z2 + 2; }

 $z = $z + 1;
}

echo "</tbody>\n</table><br>\n";

echo "<p>" . $c * 2 . " Datenpunkte</p>";

if ($svg == "1") {
 fwrite($ausgabe, "</svg>\n");
 fclose($ausgabe);
 $svg_o = "coronamp.svg";
 echo "<a href='$svg_o'>SVG-Datei</a>";
}

include ("./includes/footer.php");                          # Fußteil einbinden

?>

includes/download.php

<?php

# Datum der letzten Änderung der Datenbank abfragen
$datum_datenbank = date("Y-m-d", filectime("corona_owid.csv"));
$datum_vergleich = date("Y-m-d"); 

# Datum der letzten Änderung der Datenbank abfragen
$datum_datenbank2 = date("U", filectime("corona_owid.csv"));

# Heutiges Datum in Sekunden
$datum_vergleich2 = date("U");

# Differenz in Minuten brechnen
$datum_diff = ( $datum_vergleich2 - $datum_datenbank2 ) / 60;

# Wenn die letzte Änderung mehr als 18 Stunden zurück liegt
if ($datum_diff > 1080) {             

 # Name des Logfiles
 $logfile = "db_download.log";
 $log_alt = join(file($logfile));
 $log = fopen($logfile, "w");

 # Internetadresse der Quelldatenbank
 $url = 'https://covid.ourworldindata.org/data/owid-covid-data.csv';

 # interner Datenbankname
 $file_name = "corona_owid.csv";

 # Die Datenbank herunterladen und unter $file_name abspeichern; wenn der Rückgabewert 1 ist:
 if(file_put_contents( $file_name, file_get_contents($url)) ) {
  # Ausgabe in Logfile
  fwrite($log, $log_alt . date("Y-m-d H:i") . " Datenbank aktualisiert\n");

  # erweiterte Berechnungen ausführen
  include ("./includes/datenbank_erweitern.php");

 } else { # Sonst
  # Ausgabe in Logfile
  fwrite($log, $log_alt . date("Y-m-d H:i") . " Download fehlgeschlagen\n");
 }

 # Logfile Schliessen
 fclose($logfile);     
 echo "<script>location.reload();</script>";
}

?>

includes/datenbank_erweitern.php

<?php

// nicht in eine Funktion legen! -> hat weniger Speicher

// Für die Reduktion der Datenbank -> relative Werte können auch ad hoc durch Division durch Bevölkerung erzeugt werden

include ("./includes/datenbank_reduzieren.php");

# Tabelle mit Ländernamen und ISO-Codes einlesen
$input_laender = file("laender_iso_en_de_region.csv");

# Liste in ein Array einlesen
for ( $x = 0 ; $x <= count($input_laender); $x++ ){ $array_laender[] = explode(",", $input_laender[$x] ); } 

# Assoziative Arrays erzeugen
foreach ($array_laender as $land) { $liste_laender_iso_de["$land[0]"] = $land[2]; } # ISO -> Deutsch

unset($input_laender);

// Datenbank öffnen

# reduzierte Original-Datenbank zeilenweise als Array einlesen
$input = file("corona_owid_red.csv");

// Array ergänzen

$faelle_neu_abs = array_fill(0, 28, 0);
$tote_neu_abs = array_fill(0, 28, 0);
$faelle_neu_ppm = array_fill(0, 28, 0);
$tote_neu_ppm = array_fill(0, 28, 0);
$impfungen_neu_abs = array_fill(0, 28, 0);

# temporäre Ausgabedatei öffnen
$ausgabedatei = fopen("corona_daten_tmp.csv","w");

$x = 0;
$land_tmp = "xyz";

foreach ( $input as $zeile_input ){
 # Zeile in Array aufspalten
 $array[$x] = explode(",", $zeile_input);

 # absolute Zahlen (für Zusammenfassung)
 $faelle_neu_abs[$index] = intval($array[$x][5]);
 $tote_neu_abs[$index] = intval($array[$x][8]);
 $impfungen_neu_abs[$index] = intval($array[$x][38]);

 # Zahlen pro Million Einwohner (für Diagramme)
 $faelle_neu_ppm[$index] = floatval($array[$x][11]);
 $tote_neu_ppm[$index] = floatval($array[$x][14]);

 $genesene[$index2] = array ($array[$x][10], $array[$x][0]);

 # wenn sich der neue und der alte ISO-Code unterscheiden
 if ($array[$x][2] != $land_tmp) {
  $array[0] = $array[$x];
  $x = 0;
  $index = 28;
  $index2 = 14;                         # durch $x+14 ersetzbar
  $faelle_neu_abs = array_fill(0, 28, 0);
  $tote_neu_abs = array_fill(0, 28, 0);
  $impfungen_neu_abs = array_fill(0, 28, 0);
  $faelle_neu_ppm = array_fill(0, 28, 0);
  $tote_neu_ppm = array_fill(0, 28, 0);
 }

 $summe_faelle_neu_abs[7] = 0;
 $summe_tote_neu_abs[7] = 0;
 $summe_impfungen_neu_abs[7] = 0;
 $summe_faelle_neu_ppm[7] = 0;
 $summe_tote_neu_ppm[7] = 0;

 for ( $r = 0; $r < 7; $r++ ){                                        # für r = 1 - 7
  $summe_faelle_neu_abs[7] += $faelle_neu_abs[$index-$r];             # Fälle aufsummieren
  $summe_tote_neu_abs[7] += $tote_neu_abs[$index-$r];                 # Fälle aufsummieren
  $summe_impfungen_neu_abs[7] += $impfungen_neu_abs[$index-$r];       # Fälle aufsummieren
  $summe_faelle_neu_ppm[7] += $faelle_neu_ppm[$index-$r];             # Fälle aufsummieren
  $summe_tote_neu_ppm[7] += $tote_neu_ppm[$index-$r];                 # Fälle aufsummieren
 }

 $summe_faelle_neu_abs[14] = 0;
 $summe_tote_neu_abs[14] = 0;
 $summe_impfungen_neu_abs[14] = 0;
 $summe_faelle_neu_ppm[14] = 0;
 $summe_tote_neu_ppm[14] = 0;

 for ( $r = 0; $r < 14; $r++ ){                                         # für r = 1 - 14                                  
  $summe_faelle_neu_abs[14] += $faelle_neu_abs[$index - $r];            # Fälle aufsummieren
  $summe_tote_neu_abs[14] += $tote_neu_abs[$index - $r];                # Fälle aufsummieren
  $summe_impfungen_neu_abs[14] += $impfungen_neu_abs[$index - $r];      # Fälle aufsummieren
  $summe_faelle_neu_ppm[14] += $faelle_neu_ppm[$index - $r];            # Fälle aufsummieren
  $summe_tote_neu_ppm[14] += $tote_neu_ppm[$index - $r];                # Fälle aufsummieren
 }

 // Regression 14

 $yquer = $summe_faelle_neu_ppm[14] / 14;
 $xquer = 120 / 14;

 $summe_xy = 0;
 $summe_xx = 0;

 for ( $r = 0; $r < 14; $r++ ) {                              
  $yi = $faelle_neu_ppm[$index - $r];
  $xi = $r + 1;
  $summe_xy += ( $xi - $xquer ) * ( $yi - $yquer );
  $summe_xx += ( $xi - $xquer ) * ( $xi - $xquer );
 }

 $reg14_faelle_ppm = $summe_xy / $summe_xx;
 $reg14b_faelle_ppm = $yquer - ( $reg14_faelle_ppm * $xquer );


 $summe_faelle_neu_abs[28] = 0;
 $summe_tote_neu_abs[28] = 0;
 $summe_impfungen_neu_abs[28] = 0;
 $summe_faelle_neu_ppm[28] = 0;
 $summe_tote_neu_ppm[28] = 0;

 for ( $r = 0; $r < 28; $r++ ){                                         # für r = 1 - 28 (die letzten 28 Datensätze)
  $summe_faelle_neu_abs[28] += $faelle_neu_abs[$index - $r];            # Fälle aufsummieren
  $summe_tote_neu_abs[28] += $tote_neu_abs[$index - $r];
  $summe_impfungen_neu_abs[28] += $impfungen_neu_abs[$index - $r];
  $summe_faelle_neu_ppm[28] += $faelle_neu_ppm[$index - $r];
  $summe_tote_neu_ppm[28] += $tote_neu_ppm[$index - $r];
 } 

 // Regression 28

 $yquer = $summe_faelle_neu_ppm[28] / 28;
 $xquer = 406 / 28;

 $summe_xy = 0;
 $summe_xx = 0;

 for ( $r = 0; $r < 28; $r++ ) {                              
  $yi = $faelle_neu_ppm[$index - $r];
  $xi = $r + 1;
  $summe_xy += ( $xi - $xquer ) * ( $yi - $yquer );
  $summe_xx += ( $xi - $xquer ) * ( $xi - $xquer );
 }

 $reg28_faelle_ppm = $summe_xy / $summe_xx;
 $reg28b_faelle_ppm = $yquer - ( $reg28_faelle_ppm * $xquer );

 // Ausgabe

 $tmp = str_replace('"', '', $array[$x][0]);                      # Anführungszeichen entfernen
 $array_erweitert[0] = rtrim($liste_laender_iso_de["$tmp"]);      # deutsche Namen

 $array_erweitert[1] = $summe_faelle_neu_abs[7];                  # Summe Fälle7 neu
 $array_erweitert[2] = $summe_faelle_neu_abs[14];                 # Summe Fälle14 neu
 $array_erweitert[3] = $summe_faelle_neu_abs[28];                 # Summe Fälle28 neu
 $array_erweitert[4] = round($summe_faelle_neu_abs[7] / 7, 2);    # GD 7
 $array_erweitert[5] = round($summe_faelle_neu_abs[14] / 14, 2);  # GD 14
 $array_erweitert[6] = round($summe_faelle_neu_abs[28] / 28, 2);  # GD 28

 $array_erweitert[7] = $summe_tote_neu_abs[7];                    # Summe Tote7
 $array_erweitert[8] = $summe_tote_neu_abs[14];                   # Summe Tote14
 $array_erweitert[9] = $summe_tote_neu_abs[28];                   # Summe Tote28
 $array_erweitert[10] = round($summe_tote_neu_abs[7] / 7, 2);     # GD 7
 $array_erweitert[11] = round($summe_tote_neu_abs[14] / 14, 2);   # GD 14
 $array_erweitert[12] = round($summe_tote_neu_abs[28] / 28, 2);   # GD 28

 $array_erweitert[13] = $summe_faelle_neu_ppm[7];                 # Summe Fälle7 neu
 $array_erweitert[14] = $summe_faelle_neu_ppm[14];                # Summe Fälle14 neu
 $array_erweitert[15] = $summe_faelle_neu_ppm[28];                # Summe Fälle28 neu
 $array_erweitert[16] = round($summe_faelle_neu_ppm[7] / 7, 2);   # GD 7
 $array_erweitert[17] = round($summe_faelle_neu_ppm[14] / 14, 2); # GD 14
 $array_erweitert[18] = round($summe_faelle_neu_ppm[28] / 28, 2); # GD 28

 $array_erweitert[19] = $summe_tote_neu_ppm[7];                   # Summe Tote7
 $array_erweitert[20] = $summe_tote_neu_ppm[14];                  # Summe Tote14
 $array_erweitert[21] = $summe_tote_neu_ppm[28];                  # Summe Tote28
 $array_erweitert[22] = round($summe_tote_neu_ppm[7] / 7, 2);     # GD 7
 $array_erweitert[23] = round($summe_tote_neu_ppm[14] / 14, 2);   # GD 14
 $array_erweitert[24] = round($summe_tote_neu_ppm[28] / 28, 2);   # GD 28

 $array_erweitert[25] = $reg14_faelle_ppm;     # REG14 Fälle neu
 $array_erweitert[26] = $reg14b_faelle_ppm;    # REG14 Fälle neu
 $array_erweitert[27] = $reg28_faelle_ppm;     # REG28 Fälle neu
 $array_erweitert[28] = $reg28b_faelle_ppm;    # REG28 Fälle neu

 # Wenn sich die ISO-Codes unterscheiden (zeichen für Tabellenwechsel)
 if ( $array[$x][0] == $genesene[$x - 14][1]){   
  $array_erweitert[29] = $genesene[$x - 14][0];  # Genesene (ppm)
 } else {
  $array_erweitert[29] = 0;
 }

 $array_erweitert[30] = round($summe_impfungen_neu_abs[14] * 1000000 / ( 14 * $array[$x][48]), 2);   # GD 14 Impfungen ppm
 $array_erweitert[31] = round($summe_impfungen_neu_abs[7] * 1000000 / $array[$x][48], 2);            # Summe Impfungen7 neu ppm
 $array_erweitert[32] = round($summe_impfungen_neu_abs[28] * 1000000 / $array[$x][48], 2);           # Summe Impfungen28 neu ppm

 if ( $array[$x][0] == "iso_code" ) {

 $array_erweitert = array ("Land deutsch",              # 25
                          "Sum_Faelle_neu_7_abs",       # 26
                          "Sum_Faelle_neu_14_abs",      # 27
                          "Sum_Faelle_neu_28_abs",      # 28
                          "GD_Faelle_neu_7_abs",        # 29
                          "GD_Faelle_neu_14_abs",       # 30
                          "GD_Faelle_neu_28_abs",       # 31
                          "Sum_Tote_neu_7_abs",         # 32
                          "Sum_Tote_neu_14_abs",        # 33
                          "Sum_Tote_neu_28_abs",        # 34
                          "GD_Tote_neu_7_abs",          # 35
                          "GD_Tote_neu_14_abs",         # 36
                          "GD_Tote_neu_28_abs",         # 37
                          "Sum_Faelle_neu_7_ppm",       # 38
                          "Sum_Faelle_neu_14_ppm",      # 39
                          "Sum_Faelle_neu_28_ppm",      # 40
                          "GD_Faelle_neu_7_ppm",        # 41
                          "GD_Faelle_neu_14_ppm",       # 42
                          "GD_Faelle_neu_28_ppm",       # 43
                          "Sum_Tote_neu_7_ppm",         # 44
                          "Sum_Tote_neu_14_ppm",        # 45
                          "Sum_Tote_neu_28_ppm",        # 46
                          "GD_Tote_neu_7_ppm",          # 47
                          "GD_Tote_neu_14_ppm",         # 48
                          "GD_Tote_neu_28_ppm",         # 49
                          "Reg14_Faelle_neu_ppm",       # 50
                          "Reg14b_Faelle_neu_ppm",      # 51
                          "Reg28_Faelle_neu_ppm",       # 52
                          "Reg28b_Faelle_neu_ppm",      # 53
                          "Genesene_ppm",               # 54
                          "GD_Impfungen_14_ppm",        # 55
                          "Sum_Impfungen_7",            # 56
                          "Sum_Impfungen_28" ); }       # 57

 $array_gefiltert = array( $array[$x][0],     # 0 iso_code
                           $array[$x][1],     # 1 continent
                           $array[$x][2],     # 2 location
                           $array[$x][3],     # 3 date
                           $array[$x][4],     # 4 total_cases
                           $array[$x][5],     # 5 new_cases
                           $array[$x][7],     # 6 total_deaths
                           $array[$x][8],     # 7 new deaths
                           $array[$x][10],    # 8 total_cases_ppm
                           $array[$x][11],    # 9 new_cases_ppm
                           $array[$x][13],    # 10 total_deaths_ppm
                           $array[$x][14],    # 11 new_deaths_ppm
                           $array[$x][25],    #- 12 new_tests
                           $array[$x][26],    #- 13 total_tests
                           $array[$x][27],    #- 14 total_tests_per_thousand
                           $array[$x][28],    #- 15 new_tests_per_thousand
                           $array[$x][34],    #- 16 total_vaccs
                           $array[$x][35],    #+ 17 people_vaccin
                           $array[$x][36],    #+ 18 people_fully_vaccinated
                           $array[$x][38],    #+ 19 new_vaccs
                           $array[$x][40],    #- 20 total_vaccs_per_thousand
                           $array[$x][41],    #+ 21 people_vac_per_hundred
                           $array[$x][42],    #+ 22 people_fully_vac_per_hundred
                           $array[$x][48],    # 23 population
                           trim($array[$x][49]) );  # 24 pop_density -- trim() ist notwendig um den Zeilenumbruch zu entfernen

 # die beiden Teil-Arrays zusammenführen
 $ausgabe = array_merge($array_gefiltert, $array_erweitert);

 fputcsv($ausgabedatei, $ausgabe);

 $index++;
 $index2++;
 $land_tmp = $array[$x][2];
 $x++;
}

fclose($ausgabedatei);

unset($input);

# alle Variablen leeren
foreach (array_keys($GLOBALS) as $k) unset($$k);
unset($k);

// Anführungszeichen aus der Datenbank entfernen (werden durch fputcsv eingefügt)

$input = file("corona_daten_tmp.csv"); 

# Ausgabedatei öffnen
$ausgabedatei2 = fopen("corona_daten.csv","w");

foreach ($input as $zeile) { fwrite($ausgabedatei2, str_replace('"', '', $zeile)); }

fclose($ausgabedatei2);

unset($input);

?>

includes/datenbank_reduzieren.php

<?php

# original Datenbank einlesen
$input_owid = file("corona_owid.csv"); 

# Ausgabedatei für reduzierte Datenbank öffnen oder erzeugen
$ausgabe_tmp = fopen("corona_owid_red.csv", "w"); 

# von jeder Zeile nur die ersten 50 Einträge verwenden
for ( $x = 0; $x <= count($input_owid); $x++ ){ 
 $zeile = explode(",", $input_owid[$x]);
 
 if ( preg_match("/OWID_(HIC|LIC|LMC|UMC)/i", $zeile[0]) != 1 ) {
  for( $k = 0; $k <= 49; $k++ ){
   $ausgabezeile[$k] = $zeile[$k];
  }
  fputcsv($ausgabe_tmp, $ausgabezeile);
 }
}

fclose($ausgabe_tmp);

unset($input_owid);

?>

dokumentation.php

<?php

$seitenverweis = "zusammenfassung";                                                   # interner Verweis
$laenderverweis = "DEU";                                                              # interner Verweis

include ("./includes/header.php");                                                    # Kopfteil einbinden

?>

<h2>Die Datenquelle</h2>
<p>Die Rohdaten stammen von <a href="https://ourworldindata.org/" target="_blank"><br/>
https://ourworldindata.org/</a></p>
<p>Die Datenbank kann unter <br/>
<a href="https://ourworldindata.org/coronavirus-data" target="_blank">https://ourworldindata.org/coronavirus-data</a><br/>
abgerufen werden</p>
<br/>

<h2>Der Quelltext</h2>

<?php

$liste = array("includes/header.php",                                                 # Liste mit auszugebenden Dateien
               "layout.css",
               "verteilung_tabellen.js",
               "index.php",
               "zusammenfassung.php",
               "verteilung_tabellen.php",
               "verteilung_diagramme.php",
               "includes/zeitreihe_gesamtinfektionen.php",
               "includes/zeitreihe_neuinfektionen_gesamt.php",
               "zeitreihen_tabellen.php",
               "zeitreihen_diagramme.php",
               "zeitreihen_diagramme2.php",
               "zeitreihen_diagramme3.php",
               "zeitreihen_diagramme_wochensumme.php",
               "zeitreihen_diagramme_monatssumme.php",
               "zeitreihen_diagramme_vergleich.php",
               "heatmap.php",
               "heatmap3.php",
               "includes/download.php",
               "includes/datenbank_erweitern.php",
               "includes/datenbank_reduzieren.php",
               "dokumentation.php",
               "includes/footer.php");

foreach ($liste as $dateiname){ 

echo "<a href='#$dateiname'>$dateiname</a><br>\n";

}

foreach ($liste as $dateiname){                                                     # Für jedes Element des Arrays $liste (für jeden Dateinamen)

 $datei_inhalt = file($dateiname);                                                  # den Inhalt der Datei mit dem aktuellen Namen in $datei_inhalt schreiben

 echo "<div id='$dateiname'><h3>$dateiname</h3>\n";                                                      # den Namen der Datei als Überschrift der Ebene 3 ausgeben
 echo "<pre>";                                                                      # HMTL-Tag zur Darstellung von Quellcode
 
 foreach ($datei_inhalt as $zeile){                                                 # für jede Zeile des aktuellen Dateiinhaltes
  echo htmlentities($zeile);                                                        # den Inhalt ausgeben, wobei HTML-Tags in HTML Entities umgewandelt werden
 }
 echo "</pre>\n";                                                                   # Tag schliessen
}

include ("./includes/footer.php");                                                  # Fussteil einbinden

?>

includes/footer.php

<?php

if ($debug) {
 $memory["ende"] = round(memory_get_usage() / 1024, 0);

 echo "<p>Debugging<p>";
 echo "Zeitzone: " . $memory["timezone"] . "<br>\n";
 foreach ($memory as $name => $wert) {
  if ($name != "timezone") {
   echo($name . ": " . $wert . " KB<br>\n");
  }
 }
}

?>

<!-- Inhaltsteil Ende -->

   </td>
  </tr>
 </table>

<footer>
<center>
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
<br/><?php echo date("Y-m-d"); ?>
</center>
</footer>

</body>

</html>