php Wochenende ausschließen
Pit
- php
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
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
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
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
Lass dir die Werte von
$wdh
undin_array(...)
anzeigen. Ansonsten wäreauthor: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
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
Hallo Pit,
im Übrigen ist die Bedingung unnötig kompliziert.
Abfragen der Form !A || (A && B)
lassen sich vereinfachen.
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).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
Hallo Rolf,
- 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
Hallo Pit,
boolesche Algebra darfst Du in jeder Programmiersprache nutzen 😉
Rolf
Hi Rolf,
boolesche Algebra darfst Du in jeder Programmiersprache nutzen 😉
Gut zu wissen... ich das ja alles nie studiert, sondern bin kompletter Autodidaktiker 😉
Pit
Warum der Umweg über das Array? "w" liefert Dir doch den Wochentag den Du unmittelbar vergleichen kannst. MfG
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