Dies ist eine alte Version des Dokuments!
Ein praktisches Anwendungsbeispiel für die Nutzung von Bit-Operatoren ist die Speicherung von allen möglichen Kombinationen von Wochentagen in nur einem einzigen Datenbankfeld. Hierfür wird jedem Wochentag ein fester Wert zugeordnet:
Wochentag | date(„w“) | Dezimal-Wert | Binär-Wert |
---|---|---|---|
Sonntag | 0 | 1 | 00000001 |
Montag | 1 | 2 | 00000010 |
Dienstag | 2 | 4 | 00000100 |
Mittwoch | 3 | 8 | 00001000 |
Donnerstag | 4 | 16 | 00010000 |
Freitag | 5 | 32 | 00100000 |
Samstag | 6 | 64 | 01000000 |
Für die Erstellung unseres Beispiel sind zunächst nur die Dezimal-Werte interessant. Der Standardwert für unser Datenbankfeld wäre 127, da dieser Wert alle Wochentage beinhaltet. Da wir maximal nur einen Byte zur Darstellung aller möglichen Kombinationen von Wochentagen benötigen reicht ein Datenbankfeld vom Typ „tinyint(3)“ aus. Tinyint kann nämlich alle Werte bis genau 127 aufnehmen.
Wenn wir jetzt z. B. ein Script nur an den Tagen der Lottoziehung 6 aus 49, nämlich Mittwoch (Dezimal-Wert 8) und Samstag (Dezimal-Wert 64), ausführen wollen speichern wir in dem Datenbankfeld den addierten Wert 72.
Um festzustellen, ob der heutige Tag einem Wochentag des Datenbankfeldes entspricht übersetzen wir das Ergebnis des PHP-Aufrufes date(„w“) gegen die entsprechenden Dezimal-Werte durch ein Array, wobei wir uns die Angabe des keys sparen, da dieser beim nummerischen Array automatisch von 0 an hochzählt. Als nächstes überprüfen wir, ob unser Wert 72 dem heutigen Wochentag entspricht.
$weekdays = 72; // Wert aus der Datenbank: Mittwoch und Samstag $values = array( 1, 2, 4, 8, 16, 32, 64 ); $today = date("w" ); // heutiger Wochentag (0 bis 7) $value = $values[$today]; // heutigen Wert aus Wertezuordnung ermitteln if( $value & $weekdays ) { echo "Heute ist Mittwoch oder Samstag!"; }