布尔值开关/反转

时间:2011-01-05 11:33:25

标签: php boolean

是否有在PHP中切换/反转boolean值的功能?

喜欢...的快捷方式:

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

8 个答案:

答案 0 :(得分:121)

是:

$boolean = !$boolean;

如果它不是布尔值,则可以使用三元构造:

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

答案 1 :(得分:5)

使用绝对值函数abs()怎么样,$ val可以是" 1"或" 0"你要反转它:

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

逻辑:

总是减去" 1"从数字和消除"签署"。

1 - 1 = 0
abs(0) = 0

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

答案 2 :(得分:5)

如果您想要尽可能短的代码,请将布尔值与1:

进行异或
$boolean ^= 1;

严格来说,这会返回一个int而不是一个布尔值。它与$boolean = !$boolean的工作方式不同(效率稍差),但在大多数情况下,它应该可以完成这项工作。

答案 3 :(得分:1)

只需使用!反转结果,就可以这样:  $ boolean =!(bool)$ result;

答案 4 :(得分:0)

布尔的一键选择:

$ detector =!$ picker = $ detector;

答案 5 :(得分:0)

您可以一行完成:

<?php
$val = 0 
$val = $val ==1?0:1;  
?>

答案 6 :(得分:0)

我比较了列出的所有方法,甚至比较有趣的方法,以检查更快的方法,其中还包括另外一种$bool = $bool!=true;

$max=1000000;
$bool=true;

for($t=-microtime(true),$i=0;$i<$max;++$i){
    if($bool) $bool=false; else $bool=true;
}//Time 0.3589
echo sprintf("Time %.4F\n",$t+microtime(true));

for($t=-microtime(true),$i=0;$i<$max;++$i){
    switch($bool){ case true: $bool=false; break; default: $bool=true;}
}//Time 0.4387
echo sprintf("Time %.4F\n",$t+microtime(true));

for($t=-microtime(true),$i=0;$i<$max;++$i){
    $bool = !$bool;
}//Time 0.2833
echo sprintf("Time %.4F\n",$t+microtime(true));

for($t=-microtime(true),$i=0;$i<$max;++$i){
    $bool = $bool!=true;
}//Time 0.2803
echo sprintf("Time %.4F\n",$t+microtime(true));Time 0.2803

for($t=-microtime(true),$i=0;$i<$max;++$i){
    $bool = ($bool-1)*(-1);
}//Time 0.3047
echo sprintf("Time %.4F\n",$t+microtime(true));

for($t=-microtime(true),$i=0;$i<$max;++$i){
    $bool = abs($bool-1);
}//Time 1.2211
echo sprintf("Time %.4F\n",$t+microtime(true));

for($t=-microtime(true),$i=0;$i<$max;++$i){
    $bool ^= 1; //XOR
}//Time 0.2595
echo sprintf("Time %.4F\n",$t+microtime(true));

for($t=-microtime(true),$i=0;$i<$max;++$i){
    $bool = $bool?0:1;
}//Time 0.3253
echo sprintf("Time %.4F\n",$t+microtime(true));

奇怪的是,显而易见的是性能排名第三。 XOR 比逻辑补码( negation )快一点,这似乎与不相等相似我添加到聚会中的em>运算符。

交换值的时间为1毫秒:

  1. $bool ^= 1-> 0.2595秒
  2. $bool = $bool!=true-> 0.2803秒
  3. $bool = !$bool-> 0.2833秒
  4. $bool = ($bool-1)*(-1)-> 0.3047秒
  5. $bool = $bool?0:1-> 0.3253秒
  6. if -> 0.3589秒
  7. 开关-> 0.4387秒
  8. $bool = abs($bool-1)-> 1.2211秒

答案 7 :(得分:-9)

bool可以是TRUE或FALSE。

用法:(布尔值)$ red = varbool(false);
          echo $ red;

对于true,它将返回零,一个用于false

function varbool($val){ 

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