문자열을 boolean
어떻게 변환 합니까?
$string = 'false';
$test_mode_mail = settype($string, 'boolean');
var_dump($test_mode_mail);
if($test_mode_mail) echo 'test mode is on.';
반환
부울 true
하지만이어야합니다 boolean false
.
답변
문자열은 PHP가 “빈”것으로 간주하지 않는 값을 갖지 않는 한 항상 부울 true로 평가됩니다 (의 설명서empty
에서 가져옴 ).
""
(빈 문자열);"0"
(문자열로 0)
문자열의 텍스트 값을 기반으로 부울을 설정해야하는 경우 해당 값의 존재 여부를 확인해야합니다.
$test_mode_mail = $string === 'true'? true: false;
편집 : 위의 코드는 이해를 돕기 위해 고안되었습니다. 실제로는 다음 코드가 더 적합 할 수 있습니다.
$test_mode_mail = ($string === 'true');
또는 filter_var
함수를 사용하면 더 많은 부울 값이 포함될 수 있습니다.
filter_var($string, FILTER_VALIDATE_BOOLEAN);
filter_var
truthy 값을 포함한 값의 전체 범위를 커버 "true"
, "1"
, "yes"
및 "on"
. 자세한 내용은 여기 를 참조하십시오.
답변
이 방법은 댓글에 @lauthiamkok 님이 게시했습니다. 더 많은 관심을 끌 수있는 답변으로 여기에 게시하고 있습니다.
필요에 따라 플래그 filter_var()
와 함께 사용 하는 것을 고려해야 합니다 FILTER_VALIDATE_BOOLEAN
.
filter_var( true, FILTER_VALIDATE_BOOLEAN); // true
filter_var( 'true', FILTER_VALIDATE_BOOLEAN); // true
filter_var( 1, FILTER_VALIDATE_BOOLEAN); // true
filter_var( '1', FILTER_VALIDATE_BOOLEAN); // true
filter_var( 'on', FILTER_VALIDATE_BOOLEAN); // true
filter_var( 'yes', FILTER_VALIDATE_BOOLEAN); // true
filter_var( false, FILTER_VALIDATE_BOOLEAN); // false
filter_var( 'false', FILTER_VALIDATE_BOOLEAN); // false
filter_var( 0, FILTER_VALIDATE_BOOLEAN); // false
filter_var( '0', FILTER_VALIDATE_BOOLEAN); // false
filter_var( 'off', FILTER_VALIDATE_BOOLEAN); // false
filter_var( 'no', FILTER_VALIDATE_BOOLEAN); // false
filter_var('asdfasdf', FILTER_VALIDATE_BOOLEAN); // false
filter_var( '', FILTER_VALIDATE_BOOLEAN); // false
filter_var( null, FILTER_VALIDATE_BOOLEAN); // false
답변
문자열 "false"
은 실제로 "TRUE"
PHP 에서 값으로 간주됩니다 . 설명서는 다음과 같이 말합니다.
명시 적으로 값을 부울로 변환하려면 (bool) 또는 (boolean) 캐스트를 사용하십시오. 그러나 연산자, 함수 또는 제어 구조에 부울 인수가 필요한 경우 값이 자동으로 변환되므로 대부분의 경우 캐스트가 필요하지 않습니다.
유형 저글링을 참조하십시오.
부울로 변환 할 때 다음 값은 FALSE로 간주됩니다.
부울 거짓 자체
정수 0 (영)
float 0.0 (영)
빈 문자열 및 문자열 “0”
요소가없는 배열
멤버 변수가없는 객체 (PHP 4 만 해당)
특수 유형 NULL (설정되지 않은 변수 포함)
빈 태그에서 생성 된 SimpleXML 객체
다른 모든 값은 TRUE (모든 리소스 포함)로 간주됩니다.
그래서 당신이 할 경우 :
$bool = (boolean)"False";
또는
$test = "false";
$bool = settype($test, 'boolean');
두 경우 모두 $bool
입니다 TRUE
. 따라서 GordonM이 제안한 것처럼 수동으로 수행해야합니다.
답변
JSON으로 작업 할 때을 통해 부울 값을 보내야했습니다 $_POST
. 비슷한 일을 할 때 비슷한 문제가 발생했습니다.
if ( $_POST['myVar'] == true) {
// do stuff;
}
위의 코드에서 내 부울은 JSON 문자열로 변환되었습니다.
이를 극복하기 위해 다음을 사용하여 문자열을 디코딩 할 수 있습니다 json_decode()
.
//assume that : $_POST['myVar'] = 'true';
if( json_decode('true') == true ) { //do your stuff; }
(이것은 일반적으로 부울 값을 문자열로 변환하고 JSON을 사용하는 것 이외의 다른 방법으로 서버에 전송하는 경우 작동합니다.)
답변
json_decode를 사용하여 부울을 디코딩 할 수 있습니다
$string = 'false';
$boolean = json_decode($string);
if($boolean) {
// Do something
} else {
//Do something else
}
답변
(boolean)json_decode(strtolower($string))
가능한 모든 변형을 처리합니다. $string
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
답변
“boolean”변수가 $ _POST 및 $ _GET과 같은 전역 배열에서 온 경우 filter_input()
필터 기능을 사용할 수 있습니다 .
POST의 예 :
$isSleeping = filter_input(INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN);
“부울”변수가 다른 소스에서 온 경우 filter_var()
필터 기능을 사용할 수 있습니다 .
예:
filter_var('true', FILTER_VALIDATE_BOOLEAN); // true