부울 PHP로 문자열을 변환하는 방법


318

문자열을 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.


왜 $ bool = !! $ string1에 대해 답했습니까?
zloctb 2009 년

1
@zloctb는 질문에 대답하지 않기 때문에. !!$string1최고 등급의 답변에 요약 된 문자열을 나타내는 부울을 반환합니다.
David Barker

답변:


347

문자열은 PHP가 "빈"것으로 간주하지 않는 값을 갖지 않는 한 항상 부울 true로 평가됩니다 (의 설명서empty 에서 가져옴 ).

  1. "" (빈 문자열);
  2. "0" (문자열로 0)

문자열의 텍스트 값을 기반으로 부울을 설정해야하는 경우 해당 값의 존재 여부를 확인해야합니다.

$test_mode_mail = $string === 'true'? true: false;

편집 : 위의 코드는 이해를 돕기 위해 고안되었습니다. 실제로는 다음 코드가 더 적합 할 수 있습니다.

$test_mode_mail = ($string === 'true');

또는 filter_var함수를 사용하면 더 많은 부울 값이 포함될 수 있습니다.

filter_var($string, FILTER_VALIDATE_BOOLEAN);

filter_vartruthy 값을 포함한 값의 전체 범위를 커버 "true", "1", "yes""on". 자세한 내용은 여기 를 참조하십시오.


5
무엇을하고 있는지 잘 모르는 경우 항상 엄격한 비교를 사용하는 것이 좋습니다.$string === 'true'
Znarkus

248
나는 이것을 발견했다- filter_var($string, FILTER_VALIDATE_BOOLEAN);좋은 것인가?
laukok

10
삼항은 필요하지 않은 것 같습니다. 왜 $ test_mode_mail을 불평등의 가치로 설정하지 않습니까? $ test_mode_mail = $ 문자열 === '사실'
팀 은행

3
그러나 1/0, 참 / 거짓은 어떻습니까? @lauthiamkok의 답변이 최고라고 생각합니다.
ryabenko-pro 2014

1
@FelipeTadeo PHP가 부울 연산과 관련하여 문자열을 평가하는 방법에 대해 이야기하고 있습니다. eval ()에 대해 언급 한 적이 없으며 어떤 상황에서도 사용하지 않는 것이 좋습니다. 문자열 "(3 <5)"는 비어 있지 않기 때문에 PHP에서 부울 true로 평가됩니다.
GordonM

647

이 방법은 댓글에 @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

5
문서에 따르면이 기능은 PHP 5> = 5.2.0에서 사용할 수 있습니다. php.net/manual/en/function.filter-var.php
Westy92

4
나는 true, false, on, 0 등과 같은 값을 가진 WordPress 단축 코드 속성을 기반으로 부울을 설정하는이 솔루션을 정말로 좋아합니다. 훌륭한 대답은 분명히 받아 들여지는 대답이어야합니다.
AndyWarren

11
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)나를 위해 더 잘 일했습니다. 참조 php.net/manual/en/function.filter-var.php#121263
라이언

!! 중요 사항 !! 필터가 실패하면 filter_var도 FALSE를 반환합니다. 일부 문제가 발생할 수 있습니다.
AFA Med

35

문자열 "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이 제안한 것처럼 수동으로 수행해야합니다.


1
물론, 낮은 쪽은 거짓을 반환합니다. 실제로 치명적입니다 :) "치명적 오류 : 변수 만 참조로 전달할 수 있습니다." $ a = '거짓'; settype ($ a, 'boolean'); var_dump ($ a); 실제로 거짓을 반환합니다.
Rob

16

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을 사용하는 것 이외의 다른 방법으로 서버에 전송하는 경우 작동합니다.)


11

json_decode를 사용하여 부울을 디코딩 할 수 있습니다

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}

주어진 문자열이 정수이면 json_decode도 정수로 변환됩니다
Mihai Răducanu

1
네, 사실입니다,하지만 문자열이 부울 값을 들고 언급
souparno majumder

8
(boolean)json_decode(strtolower($string))

가능한 모든 변형을 처리합니다. $string

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false

무엇에 대한 on그리고 off?
Cyclonecode

7

"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

7

당신이 사용할 수있는 boolval($strValue)

예 :

<?php
echo '0:        '.(boolval(0) ? 'true' : 'false')."\n";
echo '42:       '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0:      '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2:      '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"":       '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0":      '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1":      '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]:   '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]:       '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>

문서 http://php.net/manual/es/function.boolval.php


2
echo boolval('false');=> 1
Mubashar

당신은 사용할 수 있습니다 echo (int)'false;또는echo intval('false');
anayarojo

@anayarojo (int)'true'하고 intval('true')모두 반환 0도 (모든 문자열이 할)
sketchyTech

4

가장 쉬운 방법은 다음과 같습니다.

$str = 'TRUE';

$boolean = strtolower($str) == 'true' ? true : false;

var_dump($boolean);

이 방법으로 일련의 'true', 'TRUE', 'false'또는 'FALSE'를 반복하여 문자열 값을 부울로 가져올 수 있습니다.


3

다른 답변은 너무 복잡합니다. 이 질문은 단순히 논리적 인 질문입니다. 당신의 진술을 올바르게하십시오.

$boolString = 'false';
$result = 'true' === $boolString;

이제 당신의 대답은

  • false문자열이 'false'이면
  • 또는 true당신의 문자열, 있다면 'true'.

에 대한 별칭 과 같은 문자열이 필요한 경우filter_var( $boolString, FILTER_VALIDATE_BOOLEAN ); 여전히 더 나은 옵션이 될 것 입니다 .on/yes/1true


3
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

또는

function stringToBool($string) {
    return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}

3
filter_var($string, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);

$string = 1; // true
$string ='1'; // true
$string = 'true'; // true
$string = 'trUe'; // true
$string = 'TRUE'; // true
$string = 0; // false
$string = '0'; // false
$string = 'false'; // false
$string = 'False'; // false
$string = 'FALSE'; // false
$string = 'sgffgfdg'; // null

지정해야합니다

FILTER_NULL_ON_FAILURE
그렇지 않으면 $ string에 다른 것이 포함되어 있어도 항상 거짓이됩니다.


2

settype 메소드도 사용할 수 있습니다!

SetType ($ var, "Boolean") 에코 $ var // 0 또는 1 참조


2

대소 문자를 구분하지 않는 문자열 "false"를 부울 FALSE로 캐스팅하는 방식으로 수행하지만 다른 모든 문자열에 대해 일반적인 PHP 캐스팅 규칙을 사용하여 작동합니다. 이것이 예기치 않은 동작을 방지하는 가장 좋은 방법이라고 생각합니다.

$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;

또는 기능으로 :

function safeBool($test_var){
    $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
    return (boolean) $test_var;
}

2

@GordonM 의 답변 이 좋습니다. 그러나 $string이미 존재하는 경우 true(즉, 문자열이 문자열이 아니라 부울 TRUE 인 경우) 실패합니다 ... 비논리적으로 보입니다.

그의 대답을 연장하면 다음을 사용합니다.

$test_mode_mail = ($string === 'true' OR $string === true));

0

워드 프레스 단축 코드 속성과 혼동되어 모든 가능성을 처리하는 사용자 정의 함수를 작성하기로 결정했습니다. 어쩌면 누군가에게 유용 할 수 있습니다.

function stringToBool($str){
    if($str === 'true' || $str === 'TRUE' || $str === 'True' || $str === 'on' || $str === 'On' || $str === 'ON'){
        $str = true;
    }else{
        $str = false;
    }
    return $str;
}
stringToBool($atts['onOrNot']);

1
나는 처음부터 도움을 찾고 있었지만 원하는만큼 쉬운 것을 찾지 못했습니다. 그래서 내가 직접 함수를 작성했습니다. 자유롭게 사용하십시오.
tomi

-1

간단한 방법은 사실이라고 생각되는 값의 배열을 확인하는 것입니다.

$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);

-1

원래 답변이 OP의 질문과 관련이 없기 때문에 여기에 언급되지 않은 가능성을 보여주기 위해 편집되었습니다.

preg_match (); 사용할 수 있습니다. 그러나 대부분의 응용 프로그램에서는 여기의 다른 답변보다 사용하기가 훨씬 더 무겁습니다.

if (preg_match("/true/i", "true PHP is a web scripting language of choice.")) {
    echo "<br><br>Returned true";
} else {
    echo "<br><br>Returned False";
}

/(?:true)|(?:1)/i특정 상황에서 필요한 경우에도 사용할 수 있습니다. "false"와 "1"을 모두 포함하는 문자열을 평가할 때 올바르게 반환되지 않습니다.


이것은 요청 된 것이 아닙니다. 문제는 문자열을 부울로 변환하는 방법입니다.
mrded

mrded : 사과하는 질문을 잘못 읽었습니다. 영의 좋은 형태로 여기에 언급되지 않은 또 다른 가능성을 추가하겠습니다.
JSG

-1

PHP에서는 double not operator ( !!)를 사용하여 간단히 값을 부울로 변환 할 수 있습니다 .

var_dump(!! true);     // true
var_dump(!! "Hello");  // true
var_dump(!! 1);        // true
var_dump(!! [1, 2]);   // true
var_dump(!! false);    // false
var_dump(!! null);     // false
var_dump(!! []);       // false
var_dump(!! 0);        // false
var_dump(!! '');       // false

-4

(bool)을 사용하여 부울로 캐스트 할 수 있어야하지만 이것이 문자열 "true"및 "false"에서 작동하는지 확인하지 않으면 확실하지 않습니다.

이것은하지만 팝 가치가있을 수 있습니다

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

내부에 넣을 때 다음이 부울 거짓으로 평가된다는 것을 아는 것이 가치가 있습니다.

if()
  • 부울 거짓 자체
  • 정수 0 (영)
  • float 0.0 (영)
  • 빈 문자열 및 문자열 "0"
  • 요소가없는 배열
  • 멤버 변수가없는 객체 (PHP 4 만 해당)
  • 특수 유형 NULL (설정되지 않은 변수 포함)
  • 빈 태그에서 생성 된 SimpleXML 객체

그렇지 않으면 모두 참으로 평가됩니다.

여기에 설명 된대로 : http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting


6
첫 번째 단락의 추측에 대한 응답으로 부울에 명시 적 캐스트를 사용하면로 변환 "false"됩니다 true.
Mark Amery

2
이것은 "true"를 출력 할 것입니다$myBool = (bool)"False"; if ($myBool) { echo "true"; }
SSH This

2
""또는 "0"을 포함하지 않으면 문자열이 true로 평가됩니다.
마이클 J. 칼 킨스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.