부울 PHP로 문자열을 변환하는 방법
문자열을 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');
이 방법은 댓글에 @lauthiamkok 님이 게시했습니다. 더 많은 관심을 끌 수있는 답변으로 여기에 게시하고 있습니다.
필요에 따라 플래그 filter_var()
와 함께 사용 하는 것을 고려해야 합니다 FILTER_VALIDATE_BOOLEAN
.
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( 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
가장 쉬운 방법은 다음과 같습니다.
$str = 'TRUE';
$boolean = strtolower($str) == 'true' ? true : false;
var_dump($boolean);
이 방법으로 일련의 'true', 'TRUE', '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
당신이 사용할 수있는 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
다른 답변은 너무 복잡합니다. 이 질문은 단순히 논리적 인 질문입니다. 당신의 진술을 올바르게하십시오.
$boolString = 'false';
$result = 'true' === $boolString;
이제 당신의 대답은
false
문자열이'false'
이면- 또는
true
당신의 문자열, 있다면'true'
.
에 대한 별칭 과 같은 문자열이 필요한 경우filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
여전히 더 나은 옵션이 될 것 입니다 .on/yes/1
true
function stringToBool($string){
return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}
또는
function stringToBool($string) {
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
settype 방법도 사용할 수 있습니다!
SetType ($ var, "Boolean") 에코 $ var // 0 또는 1 참조
대소 문자를 구분하지 않는 문자열 "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;
}
@GordonM 의 답변 이 좋습니다. 그러나 $string
이미 존재하는 경우 true
(즉, 문자열이 문자열이 아니라 부울 TRUE 인 경우) 실패합니다 ... 비논리적으로 보입니다.
그의 대답을 확장하면 다음을 사용합니다.
$test_mode_mail = ($string === 'true' OR $string === true));
워드 프레스 단축 코드 속성과 혼동되어 모든 가능성을 처리하는 사용자 정의 함수를 작성하기로 결정했습니다. 어쩌면 누군가에게 유용 할 수 있습니다.
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']);
흠, 나는 그런 문제가 있었고 나는 간단한 방법으로 그 일을했다.
$string = 'false';
if( $string == 'true'){
$string = true;
}else if($string == 'false'){
$string= false;
}
아래 접근법을 사용하고 있습니다.
$test = "true";
$test == 'false' ? $test = false : $test = true;
echo $test;
if(empty($test)){
echo "IT IS FALSE";
}
if($test){
echo "IT IS TRUE";
}
내 원래 답변이 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"을 모두 포함하는 문자열을 평가할 때 올바르게 반환되지 않습니다.
간단한 방법은 사실이라고 생각되는 값의 배열을 확인하는 것입니다.
$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);
(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
참고 URL : https://stackoverflow.com/questions/7336861/how-to-convert-string-to-boolean-php
'IT' 카테고리의 다른 글
Sublime text 2에 눈금자를 항상 표시하는 방법은 무엇입니까? (0) | 2020.03.20 |
---|---|
PHP에서 다차원 배열에서 중복 값을 제거하는 방법 (0) | 2020.03.20 |
Twitter API 버전 1.1로 user_timeline을 검색하기위한 가장 간단한 PHP 예제 (0) | 2020.03.20 |
PHP를 사용하여 폴더에서 모든 파일을 삭제 하시겠습니까? (0) | 2020.03.20 |
파이썬에서 IoC / DI가 일반적이지 않은 이유는 무엇입니까? (0) | 2020.03.20 |