Rolf B: Status ausschließen

Beitrag lesen

Hallo Bernd,

die in_array Methode ist flexibler; du kannst die Liste der auszublendenden Status dann einfacher aus einer Datenquelle einsteuern.

Wenn das nicht nötig ist, wenn Du sicher bist, dass es genau diese sieben sind und keine anderen, kannst Du auch den IF nehmen.

Darf ich Dich übrigens mit Herrn De Morgan bekannt machen? Der hat zwei Regeln formuliert, die sich auf negierte logische Ausdrücke beziehen. Generationen von Programmierern haben schon über diese Regeln geflucht. Aber leider sind sie die Wahrheit.

Seien A und B logische Werte (z.B. das Ergebnis einer Abfrage wie $x > 3). Der Strich obendrüber ist Theoretiker-Sprech für "NICHT".

De Morgan Regel 1: $$\overline{A\ \mathrm{and}\ B} = \overline{A}\ \mathrm{or}\ \overline{B}$$
De Morgan Regel 2: $$\overline{A\ \mathrm{or}\ B} = \overline{A}\ \mathrm{and}\ \overline{B}$$

D.h. wenn ich zwei logische Werte AND oder OR verknüpfe und die ganze Bedingung negieren will, kann ich das so machen, dass ich die logischen Werte negiere (die Bedingung umdrehe) und dann AND mit OR tausche. Dieses Tauschen vergisst man gern.

Beispiel in PHP:

if ($a > 3 && $b > 4)
{
   // tu nichts
}
else
{
   // tu was
}

So ein Konstrukt ist blöd, weil nur im ELSE-Teil was passiert. Man möchte die Bedingung also gern umdrehen, um den ELSE zu sparen und den Code kompakter zu bekommen.

if (!($a > 3 && $b > 4))
{
   // tu was
}

Das ist immer noch blöd, wegen der doppelten Klammer und dem versteckten NOT-Ausrufezeichen vorn. Ich kann jetzt die De Morgan Regel 1 anwenden. Statt die ganze Bedingung zu negieren, negiere ich die Bedingungsteile und mache aus && ein ||. Das Negieren einer "Größer" Abfrage ist eine "Kleiner gleich" Abfrage:

if ($a <= 3 || $b <= 4))
{
   // tu was
}

So sieht das doch viel hübscher aus.

Rolf

--
sumpsi - posui - clusi