是否有在PHP中切换/反转boolean
值的功能?
喜欢...的快捷方式:
if($boolean === true){
$boolean = false;
}else{
$boolean = true;
}
答案 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毫秒:
$bool ^= 1
-> 0.2595秒$bool = $bool!=true
-> 0.2803秒$bool = !$bool
-> 0.2833秒$bool = ($bool-1)*(-1)
-> 0.3047秒$bool = $bool?0:1
-> 0.3253秒$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;
}