2011-01-05 15 views
45

Esiste una funzione per l'attivazione/l'inversione del valore boolean in PHP?Valore booleano/invertito

Come ... una scorciatoia per:

if($boolean === true){ 
    $boolean = false; 
}else{ 
    $boolean = true; 
} 
+3

http://uk.php.net/manual/en/language.operators.logical.php – Piskvor

risposta

103

Sì:

$boolean = !$boolean; 

se non è un valore booleano, è possibile utilizzare la costruzione ternario:

$int = ($some_condition ? 1 : 2); // if $some_condition is true, set 1 
            // otherwise set 2 
+1

'$ bool =! $ Bool' dovrebbe girare * true * su * false *, ma girerà * falso * a * vero *? – jolt

+2

@Tom sicuro. Provalo –

+0

Questo codice è eccellente. È così semplice, e non ci avrei mai pensato! – 131

-9

bool può essere TRUE o FALSE.

Utilizzare il presente

utilizzo: (booleano) $ rosso = varbool (false);
echo $ rosso;

per la vera verrà restituito zero e uno per falso

function varbool($val){ 

    $val +=(-1); 
    $val *= (-1); 
    return $val; 
} 

Grazie ...

+4

Solo una domanda ... ** perché **? Cosa c'è di sbagliato in '!'? (Sono tentato di -0,5 per reinventare la ruota e -0,5 per averlo fatto molto male) – delnan

+11

Grazie per la risata! – Max

+0

Eleganza è il nome che segue il tuo nome e prima del tuo cognome, se hai tre nomi. – Ben

0

Un tocco di selezionamento booleana:

$ rivelatore = $ picker = $ rivelatore;

3

Cosa succede ad usare la funzione valore assoluto abs(), $ val può essere "1" o "0" e si vuole invertire esso:

$val = abs($val-=1); 

La logica:

sottraendo sempre "1" dal numero ed eliminando il "segno".

1 - 1 = 0 
abs(0) = 0 

0 - 1 = -1 
abs(-1) = 1 
2

Se si desidera che il codice più breve possibile, XOR il booleano con 1:

$boolean ^= 1; 

Rigorosamente questo restituisce un int non un valore booleano. Non funziona allo stesso modo di $boolean = !$boolean (ed è leggermente meno efficiente) ma per la maggior parte degli scopi dovrebbe fare il lavoro.

+0

tks @Gannet ha fatto il trucco per me! –

1

Basta usare ! per invertire il risultato in modo che possa essere il seguente: $ booleano =! (Bool) $ result;

Problemi correlati