부울값 스위치/반전
전환/반전 기능이 있습니까?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백만 번 스왑하는 시간:
$bool ^= 1
-> 0.2595초$bool = $bool!=true
-> 0.2803초$bool = !$bool
-> 0.2833초$bool = ($bool-1)*(-1)
-> 0.3047초$bool = $bool?0:1
-> 0.1403초- if -> 0.3589초
- 스위치 -> 0.4387초
$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
'programing' 카테고리의 다른 글
창의 명령줄에서 mysql 데이터 디렉터리를 찾는 방법 (0) | 2022.10.29 |
---|---|
PHP에서 ereg 식을 preg로 변환하려면 어떻게 해야 하나요? (0) | 2022.10.29 |
SQL 문(Python, MySQL)에서 일부 매개 변수가 사용되지 않았습니다. (0) | 2022.10.29 |
현재 날짜에서 일수를 뺀 Laravel Carbon (0) | 2022.10.29 |
Python pip 설치 실패: 잘못된 명령 eg_info (0) | 2022.10.29 |