programing

부울값 스위치/반전

copyandpastes 2022. 10. 29. 12:14
반응형

부울값 스위치/반전

전환/반전 기능이 있습니까?boolean값을 PHP로 표시합니까?

예를 들어... 바로 가기:

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

Absolute Value 함수를 사용하여abs(), $val은 "1" 또는 "0"이 될 수 있으며, 이를 반전할 수 있습니다.

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

논리는 다음과 같습니다.

항상 숫자에서 "1"을 빼고 "부호"를 제거합니다.

1 - 1 = 0
abs(0) = 0

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

가능한 한 짧은 코드를 원할 경우 1을 사용하여 부울을 XOR합니다.

$boolean ^= 1;

엄밀하게는 부울이 아닌 int를 반환합니다.와 같은 방식으로 동작하지 않습니다.$boolean = !$boolean(그리고 효율이 약간 떨어집니다) 그러나 대부분의 경우 이 기능을 수행할 수 있습니다.

그냥 사용하다!다음과 같이 결과를 반전시키려면: $syslog = !(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는 논리보완(부정)보다 조금 더 빠르며, 이 마지막은 제가 파티에 추가한 동등하지 않은 연산자와 거의 비슷한 것 같습니다.

값을 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.1403초
  6. if -> 0.3589초
  7. 스위치 -> 0.4387초
  8. $bool = abs($bool-1)-> 1.2211초

원터치 부울 선택:

$syslog = !$syslog = $syslog;

한 줄로 할 수 있습니다.

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

bool은 TRUE 또는 FALSE 중 하나입니다.

사용방법 : (false)$red = varbool(false);
echo $red;

사실이라면 0을 반환하고 거짓이면 1을 반환한다

function varbool($val){ 

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

언급URL : https://stackoverflow.com/questions/4603589/boolean-value-switch-invert

반응형