Sicherstellen, dass genau ein Boolescher Wert einer gegebenen Liste wahr ist?

8

Wenn ich die folgenden Booleans habe

%Vor%

Welchen Code kann ich schreiben, um sicherzustellen, dass genau einer wahr ist?

Ich habe es versucht:

%Vor%

Das Problem ist, dass bei allen drei Konstanten true und dann $x true festgelegt ist.

    
Matthew 30.01.2012, 11:28
quelle

6 Antworten

8

$x = ((int) self::YESTERDAY) + ((int) self::TODAY) + ((int) self::TOMORROW); Dann wenn $x === 1; Sie haben was Sie brauchen.

EDITED:

Auch ohne Typ% codes%, funktioniert es gut, dank @DaveRandom, also:

(int) , wie für mich.

    
devdRew 30.01.2012, 11:31
quelle
2

Der netteste Weg, an den ich denken kann, ist array_sum() :

%Vor%

BEARBEITEN Eigentlich müssen Sie nur die ^ durch + in Ihrem ursprünglichen Versuch ersetzen und es wird dasselbe erreicht:

%Vor%

Dies verwandelt $x in die Anzahl der TRUE -Werte. Verwenden Sie also für eine boolesche Ausgabe:

%Vor%     
DaveRandom 30.01.2012 11:34
quelle
0

Nur als Alternative zu devdRews Antwort

%Vor%     
Mark Baker 30.01.2012 11:34
quelle
0

Sie können eine Liste Ihrer Variablen durchlaufen und brechen, wenn Sie einen zweiten booleschen Wert gefunden haben, der wahr ist:

%Vor%

So ist es praktischer, wenn Sie mehr als drei Variablen haben.

    
ezdazuzena 30.01.2012 11:38
quelle
0

x gibt true zurück, wenn und nur wenn einer wahr und andere falsch sind.

%Vor%

Kann ein schlechter Code sein, funktioniert aber.

    
Jashwant 30.01.2012 11:42
quelle
0

a ^ b ^ c ^ (a & b & c) ist der Ausdruck, den Sie suchen.

    
Luis Colorado 22.09.2014 12:01
quelle