Sie müssen nicht mit binären Zeichenfolgen arbeiten, um mit Bit-Flags zu arbeiten. Deklarieren Sie Ihre Tage als Ganzzahlen 1,2,4,8 usw.
Um einen Wert, der Montag und Freitag ist, nur binär ODER die Werte zu machen. Um zu überprüfen, ob eine Zahl einen Tag enthält, binäre AND sie und überprüfen Sie, ob das Ergebnis dem Tag Ihrer Überprüfung entspricht.
Obwohl dies technisch allesamt binäre Operationen sind, müssen Sie die Binärzeichenfolgen nicht wirklich sehen oder verwenden.
Einige Beispiele mit den Dump-Ergebnisse unter ... bitte meine Verwendung von Extrakt zu ignorieren, es war einfach schneller auf diese Weise
<?php
// Day names
$dayNames = array(
'monday',
'tuesday',
'wednesday',
'thursday',
'friday',
'saturday',
'sunday',
);
// Bit values
$dayValues = array();
foreach($dayNames as $key => $value) {
$dayValues[$value] = 1 << $key;
}
var_dump($dayValues);
extract($dayValues);
// Monday and Tuesday
$monANDtue = $monday | $tuesday;
var_dump($monANDtue);
var_dump(decbin($monANDtue));
// Monday and Sunday
$monANDsun = $monday | $sunday;
var_dump($monANDsun);
var_dump(decbin($monANDsun));
// Is on Monday?
$isOnMonday = ($monANDsun & $monday) == $monday;
var_dump($isOnMonday);
// Is on Tuesday?
$isOnTuesday = ($monANDsun & $tuesday) == $tuesday;
var_dump($isOnTuesday);
// Is on Tuesday?
$isOnSunday = ($monANDsun & $sunday) == $sunday;
var_dump($isOnSunday);
?>
und der Ausgang
/vhost/virtual/sandbox/public/index.php:27
array(7) {
[monday] = int(1) 1
[tuesday] = int(1) 2
[wednesday] = int(1) 4
[thursday] = int(1) 8
[friday] = int(2) 16
[saturday] = int(2) 32
[sunday] = int(2) 64
}
/vhost/virtual/sandbox/public/index.php:33
int(1) 3
/vhost/virtual/sandbox/public/index.php:34
string(2) "11"
/vhost/virtual/sandbox/public/index.php:40
int(2) 65
/vhost/virtual/sandbox/public/index.php:41
string(7) "1000001"
/vhost/virtual/sandbox/public/index.php:47
bool(true)
/vhost/virtual/sandbox/public/index.php:51
bool(false)
/vhost/virtual/sandbox/public/index.php:55
bool(true)
Warum sie nicht als int speichern - > (1-6)? –