Pit: php Wochenende ausschließen

Hallo,

in einer Schleife, die (z.b.) die Tage einer Woche einträgt, möchte ich das Wochenende ausschließen. Leider wird es dennoch eingetragen, was mache ich falsch?

// Mo - Fr
$erl_mofr_array = array(1,2,3,4,5);
if (($wdh != "mofr") || (($wdh == "mofr") && (in_array(date("w",strtotime($wochenlauferClear)),$erl_mofr_array)))) {
// Eintrag
...

$wochenlauferClear wird tageweise innerhalb der Schleife hochgezählt.

Pit

  1. Hallo Pit,

    if (($wdh != "mofr") || (($wdh == "mofr") && (in_array(date("w",strtotime($wochenlauferClear)),$erl_mofr_array)))) {
    // Eintrag
    ...
    
    (!A) || ((A) && (B))
    

    Stell dir eine Wahrheitswerttabelle auf und prüfe, ob die Bedingung entsprechend deiner Wünsche korrekt ist.

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. Hi Matthias,

      Stell dir eine Wahrheitswerttabelle auf und prüfe, ob die Bedingung entsprechend deiner Wünsche korrekt ist.

      Mußte mir erstmal erklären lassen, was eine Wahrheitswerttabelle ist 😉 Aber diese Tabelle bestätigt im Prinzip genau meine Wünsche.

      Die Bedingung ist immer erfüllt, außer, wenn A erfüllt ist und b nicht erfüllt ist. Ich denke, genau das wollte ich haben.

      Pit

      1. Hallo Pit,

        Lass dir die Werte von $wdh und in_array(...) anzeigen. Ansonsten wäre author:dedlfix body:debugging eine guter Term für die Forumssuche.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. Lass dir die Werte von $wdh und in_array(...) anzeigen. Ansonsten wäre author:dedlfix body:debugging eine guter Term für die Forumssuche.

          Hallo Matthias,

          werd ich versuchen, wenns wieder läuft. Ich muß jetzt erstmal eine Endlosschleife wieder loswerden, die ich mir im Zuge der Fehlersuche eingehandelt habe…

          Pit

          1. werd ich versuchen, wenns wieder läuft. Ich muß jetzt erstmal eine Endlosschleife wieder loswerden, die ich mir im Zuge der Fehlersuche eingehandelt habe…

            Prima, ich hab den fehler gefunden:

            if (($wdh != "mofr") || (($wdh == "mofr") && (in_array(date("w",strtotime($wochenlauferClear)),$erl_mofr_array)))) {
            

            zählte $wochenlauferClear nur innerhalb der Bedingung hoch, hierdurch stoppte der Eintrag am Freitag. Da der Tag danach nicht hochgezählt wurde, mußte das zwangsläufig in einer Endlosschleife enden. Durch ein "else", das dann ebenfalls die Tage hochzählte, konnte ich den Fehler beheben.

            Pit

            1. Hallo Pit,

              im Übrigen ist die Bedingung unnötig kompliziert.

              Abfragen der Form !A || (A && B) lassen sich vereinfachen.

              1. Ist A == FALSE, ist nur der linke Teil des OR relevant (PHP guckt sich den rechten Teil dann erst gar nicht an, das nennt man Shortcut-Auswertung).
              2. Ist A == TRUE, ist der rechte Teil relevant, aber die AND-Verknüpfung mit A unnötig weil Du jetzt ja weißt, dass A wahr ist.

              Also: !A || (A && B) ist dasselbe wie !A || B

              Wenn Dich die Argumentation nicht überzeugt, vergleiche die Wahrheitstabellen. Diese Kenntnis dieser Transformation ist genau so wichtig wie die De-Morgan Regeln.

              Rolf

              --
              sumpsi - posui - clusi
              1. Hallo Rolf,

                1. Ist A == TRUE, ist der rechte Teil relevant, aber die AND-Verknüpfung mit A unnötig weil Du jetzt ja weißt, dass A wahr ist.

                Also: !A || (A && B) ist dasselbe wie !A || B

                Wenn Dich die Argumentation nicht überzeugt, vergleiche die Wahrheitstabellen. Diese Kenntnis dieser Transformation ist genau so wichtig wie die De-Morgan Regeln.

                Die Argumentation ist für mich absolut logisch und nachvollziehbar. Ich wußte aber tatsächlich nicht, dass man das !A || (A && B) <==> !A || B in php nutzen darf.

                Danke für den Hinweis,

                Pit

                1. Hallo Pit,

                  boolesche Algebra darfst Du in jeder Programmiersprache nutzen 😉

                  Rolf

                  --
                  sumpsi - posui - clusi
                  1. Hi Rolf,

                    boolesche Algebra darfst Du in jeder Programmiersprache nutzen 😉

                    Gut zu wissen... ich das ja alles nie studiert, sondern bin kompletter Autodidaktiker 😉

                    Pit

  2. Warum der Umweg über das Array? "w" liefert Dir doch den Wochentag den Du unmittelbar vergleichen kannst. MfG

    1. Warum der Umweg über das Array? "w" liefert Dir doch den Wochentag den Du unmittelbar vergleichen kannst. MfG

      In dem Fall ja. Aber ich möchte es so generisch programmieren, dass ich auch später x-beliebige Tagekombinationen ein- oder ausschließen kann. Könnte man zwar auch über Einzelvergleiche machen, mir ist das Array aber lieber.

      Pit