【发布时间】:2011-06-03 23:11:52
【问题描述】:
PHP中是否有切换/反转boolean值的功能?
喜欢...的快捷方式:
if($boolean === true){
$boolean = false;
}else{
$boolean = true;
}
【问题讨论】:
PHP中是否有切换/反转boolean值的功能?
喜欢...的快捷方式:
if($boolean === true){
$boolean = false;
}else{
$boolean = true;
}
【问题讨论】:
是的:
$boolean = !$boolean;
如果不是布尔值,可以使用三元构造:
$int = ($some_condition ? 1 : 2); // if $some_condition is true, set 1
// otherwise set 2
【讨论】:
$bool = !$bool 会将 true 变为 false,但会将 false 变为 true我>?
使用绝对值函数abs() 怎么样,$val 可以是“1”或“0”并且你想反转它:
$val = abs($val-=1);
逻辑:
总是从数字中减去“1”并消除“符号”。
1 - 1 = 0
abs(0) = 0
0 - 1 = -1
abs(-1) = 1
【讨论】:
如果您想要尽可能短的代码,请将布尔值与 1 进行异或:
$boolean ^= 1;
严格来说,这将返回一个 int 而不是布尔值。它的工作方式与$boolean = !$boolean 不同(效率略低),但在大多数情况下它应该可以完成这项工作。
【讨论】:
只需使用! 来反转结果,这样就可以:
$boolean = !(bool)$result;
【讨论】:
我比较了所有列出的方式,甚至是有趣的方式,以检查哪种方式更快,其中包括一个$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 秒【讨论】:
一键选择布尔值:
$detector = !$picker = $detector;
【讨论】:
你可以在一行中完成:
<?php
$val = 0
$val = $val ==1?0:1;
?>
【讨论】:
$val 值,你可以做$val = $val?0:1;
bool 可以是 TRUE 或 FALSE。
用法:(boolean)$red = varbool(false);
回声$红色;
如果为真,它将返回零,如果为假,则返回一
function varbool($val){
$val +=(-1);
$val *= (-1);
return $val;
}
【讨论】:
! 有什么问题? (我很想-0.5 重新发明轮子,-0.5 做得很差)