Ankündigung

Einklappen
Keine Ankündigung bisher.

foreach erweitern mit Array

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • foreach erweitern mit Array

    Hallo zusammen,

    liegt warscheinlich schon an der fortgeschrittenen Zeit, aber irgendwie komme ich grade nicht drauf.

    Ich lese die Feiertags API von Jarmedia aus http://feiertage.jarmedia.de/api/?jahr=2017

    um zu prüfen ob ein Datum ein Feiertag ist, gibt es ja dieses Beispiel hier.

    PHP-Code:
    foreach($feiertage_land as $feiertagsname => $feiertagsdatum)
            if(
    $feiertagsdatum['datum'] == date('Y-m-d',strtotime($datum)))
                return 
    true;

        return 
    false
    Ich möchte mir das aber erweitern so das ich selbst das Bundesland in meiner Abfrage vorgeben muss.

    Das Array sieht so aus: (auszugsweise)

    HTML-Code:
       Array (     [BW] => Array         (             [Neujahrstag] => Array                 (                     [datum] => 2017-01-01                     [hinweis] =>                  )              [Heilige Drei Könige] => Array                 (                     [datum] => 2017-01-06                     [hinweis] =>                  )    [BY] => Array         (             [Neujahrstag] => Array                 (                     [datum] => 2017-01-01                     [hinweis] =>                  )              [Heilige Drei Könige] => Array                 (                     [datum] => 2017-01-06                     [hinweis] =>                  ) 
    in meinem foreach möchte ich das Land als BW angegeben können und im Anschluss soll dann erst das Datum geprüft werden.

    Wie stelle ich das an?

    Habe jetzt auch schon etwas probiert, aber so richtig kam ich nicht drauf.

    Mein nächster gedanke geht in richtung foreach im foreach.... Kann das sein?


    Vielen Dank Gruß Matthias

  • #2
    Hallo,

    also wenn ich das richtig verstanden habe, dann hast du in der 1. Array Ebene die ganzen Bundesländer und darunter befinden sich dann die Feiertage namentlich aufgeschlüsselt. Also müsstest du eigentlich nur eine foreach Schleife außen herum bauen. Also ungefähr so:
    PHP-Code:
    $today = new \DateTime();  // Dein Bundesland, auf das geprüft werden soll: $stateToCheck = 'BY'; foreach ($states as $state => $holidays) {     if ($state === $cmpState) {         foreach ($holidays as $feiertagsname => $feiertagsdatum) {             if ($today->format('Y-m-d') === $feiertagsdatum) {                 return true;             }         }     } } 
    Oder falls es sich immer nur um ein Bundesland handelt, dann kannst Du es auch so verkürzen (und auch performanter machen, weil er nur einmal durchgeht):
    PHP-Code:
      if (isset($states[$stateToCheck]) && is_array($states[$stateToCheck])) {     foreach ($states[$stateToCheck] as $feiertagsname => $feiertagsdatum) {         if ($today->format('Y-m-d') === $feiertagsdatum) {             return true;         }     } } 
    Von der Funktion strtotime rate ich Dir dringlich ab, denn die kann funktionieren, muss aber nicht. Außerdem ist es allgemein nicht gut mit Timestamps zu arbeiten, geschweige denn auf Timestamp Basis irgendwelche Daten zu berechnen. Denn Timestamps beachten keine Schaltjahre usw..
    Außerdem hast du mit der date() Funktion auf 32 Bit System auch das Jahr 2032 Problem...

    Nimm lieber die DateTime Klasse, die wurde genau dafür gemacht! Außerdem kannst du der direkt einen ISO Date String übergeben, musst also nix hässlich mit strtotime parsen.


    MFG

    derwunner

    Kommentar


    • #3
      Warum von einer externen API anhängig sein? Schau dir mal dies an : HolidayCalendar.

      Kommentar


      • #4
        um zu prüfen ob ein Datum ein Feiertag ist ... Ich möchte mir das aber erweitern so das ich selbst das Bundesland in meiner Abfrage vorgeben muss
        Tatsächlich sollte das mit der von jspit erwähnten Klasse oben dazu ausreichen.
        PHP-Code:
        require_once __DIR__ '/HolidayCalendar.php';
        $holiday = new HolidayCalendar('de.php');
        $holiday->setFilter(['BW']);

        $today = (new DateTime('now'))->format('Y-m-d');
        var_dump$holiday->isHoliday($today) ); 
        Ich werd da noch eine kleine Ergänzung machen, das für isHoliday() bei nicht-Angabe als defaultParameter heute verwendet wird. Scheint mir für so eine übliche Prüfung bequem zu sein.

        Kommentar

        Lädt...
        X