Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 布尔值开关/反转_Php_Boolean - Fatal编程技术网

Php 布尔值开关/反转

Php 布尔值开关/反转,php,boolean,Php,Boolean,PHP中是否有用于切换/反转布尔值的函数 像。。。快捷方式: if($boolean === true){ $boolean = false; }else{ $boolean = true; } 是的: 如果不是布尔值,则可以使用三元结构: $int = ($some_condition ? 1 : 2); // if $some_condition is true, set 1 // otherwise se

PHP中是否有用于切换/反转
布尔值的函数

像。。。快捷方式:

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

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

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

布尔可以是真的也可以是假的

用法:(布尔)$red=varbool(false)
回声$red

如果为true,则返回0,如果为false,则返回1

function varbool($val){ 

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

一触式拾取布尔值:


$detector=$选择器=$检测器

使用绝对值函数
abs()
,$val可以是“1”或“0”,您要反转它:

$val = abs($val-=1);
逻辑是:

始终从数字中减去“1”并删除“符号”


如果需要最短的代码,请将布尔值与1异或:

$boolean ^= 1;

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

只需使用
以反转结果,使其类似于:
$boolean=!(bool)$结果

您可以在一行中完成:

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

我比较了所有列出的方法,甚至是有趣的方法,以检查什么更快,包括一个更多的
$bool=$bool=是的

$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));
$max=1000000;
$bool=true;
对于($t=-microtime(true),$i=0;$i 1.2211秒

$bool=!$bool
会变真为假,但它会变假为真吗?这段代码非常棒。它如此简单,我从来没有想到过!有没有第三种方法可以实现这种代码?@Richard你在寻找什么样的方法?它应该做什么/不应该做什么?我想要的代码有点像三元代码,但这是现在回想起来,我知道我所追求的是不可能的。我不知道为什么我昨天没有意识到,我想我读错了。只有一个问题……为什么?<代码>出了什么问题!?(我很想重新发明方向盘,得到-0.5;做得如此糟糕,得到-0.5)如果你有三个名字,优雅是在你的名字之后,在你的姓之前。这个答案应该存档。它有历史价值。我看不出历史价值,因为它从来没有回答过这个问题。@SteveBuzonas历史价值来自于它是如此他妈的有趣。假设那些
$val
值,你可以做
 $val=$val?0:1;
我进行了100万次迭代,XOR耗时0.25秒,而逻辑求反耗时0.28秒。因此,尽管它的工作方式不同,但效率可能更高。
<?php
$val = 0 
$val = $val ==1?0:1;  
?>
$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));