PHP에서 문자열을 부울 값으로 구문 분석
오늘 PHP를 가지고 놀고 있는데 문자열 값 "true"와 "false"가 다음 함수를 고려했을 때 부울로 올바르게 해석되지 않는다는 것을 발견했습니다.
function isBoolean($value) {
if ($value) {
return true;
} else {
return false;
}
}
실행하는 경우:
isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false
이 기능은 "1" 및 "0" 값에서만 작동합니다.
isBoolean("1") // Returns true
isBoolean("0") // Returns false
"true"와 "false" 문자열을 부울로 해석하는 네이티브 함수가 PHP에 있습니까?
PHP의 filter_var 메서드를 사용하는 네이티브 PHP 메서드가 있습니다.
$bool = filter_var($value, FILTER_VALIDATE_BOOLEAN);
PHP 매뉴얼에 따르면:
"1", "true", "on" 및 "yes"에 대해 TRUE를 반환합니다.그렇지 않으면 FALSE를 반환합니다.
FILTER_NULL_ON_FAILURE가 설정되어 있는 경우 FALSE는 "0", "false", "off", "no" 및 ""에 대해서만 반환되며 NULL은 모든 비부울 값에 대해 반환됩니다.
The reason is that all strings evaluate to 그 이유는 모든 문자열이 다음과 같이 평가되기 때문입니다.true when converting them to boolean, except 부울로 변환하는 경우(단,"0" ★★★★★★★★★★★★★★★★★」""(빈 문자열)(빈 문자열).
다음 기능은 PHP와 같은 기능을 정확하게 작동하지만, 수 용 하 자 로 동 작 합 다 니 the대 following: want evaluates you the will also function what원 do사 willPHP와 똑같이 동작하지만 문자열도 평가합니다."false" as ~하듯이false:
function isBoolean($value) {
if ($value && strtolower($value) !== "false") {
return true;
} else {
return false;
}
}
메뉴얼에서는, 다음의 점에 대해 설명하고 있습니다.http://php.net/manual/en/language.types.boolean.php :
부울로 변환할 경우 다음 값은 FALSE로 간주됩니다.
- 부울 FALSE 자체
- 정수 0(제로)
- 플로트 0.0 (제로)
- 빈 문자열과 문자열 "0"
- 원소가 0인 배열
- 특수 유형 NULL(설정되지 않은 변수 포함)
- 빈 태그에서 생성된 SimpleXML 개체
다른 모든 값은 TRUE(모든 리소스 포함)로 간주됩니다.
PHP에 있는 PHP 만 in"0"또는 빈 문자열이 false를 강제합니다.빈 문자열이 아닌 다른 문자열은 모두 true를 강제합니다.매뉴얼:
할 때는 이 부울로 됩니다.
FALSE:
- 빈 문자열과 문자열 "0"
을 다룰 수 있는 ."true" »"false"틀리다
function isBoolean($value) {
if ($value === "true") {
return true;
} else {
return false;
}
}
쉽게 요약할 수 있는 사이드 노트:
function isBoolean($value) {
return $value === "true";
}
최근에 당신이 질문한 것과 같은 문자열을 처리할 "느슨한" 부울 변환 함수가 필요했습니다.저는 몇 가지 다른 접근 방식을 찾아내고 그 방법을 실행하기 위한 큰 테스트 데이터 세트를 생각해 냈습니다.내 욕구에 맞는 게 없어서 내가 직접 썼다.
function loosely_cast_to_boolean($value) {
if(is_array($value) || $value instanceof Countable) {
return (boolean) count($value);
} else if(is_string($value) || is_object($value) && method_exists($value, '__toString')) {
$value = (string) $value;
// see http://www.php.net/manual/en/filter.filters.validate.php#108218
// see https://bugs.php.net/bug.php?id=49510
$filtered = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
if(!is_null($filtered)) {
return $filtered;
} else {
// "none" gets special treatment to be consistent with ini file behavior.
// see documentation in php.ini for more information, in part it says:
// "An empty string can be denoted by simply not writing anything after
// the equal sign, or by using the None keyword".
if(strtolower($value) === 'none') {
$value = '';
}
return (boolean) $value;
}
} else {
return (boolean) $value;
}
}
카운트 가능 객체와 스트링 캐스트 가능 객체의 경우 이 값이 스트링 값보다 카운트를 우선하여 진실성을 판별합니다.즉, 만약$object instanceof Countable이것은 돌아올 것이다(boolean) count($object)가치에 관계없이(string) $object.
내가 사용한 테스트 데이터의 동작과 다른 몇 가지 함수의 결과를 여기에서 볼 수 있습니다.이 작은 iframe에서 결과를 추출하는 것은 어렵기 때문에 스크립트 출력을 전체 페이지에서 볼 수 있습니다(URL은 문서화되어 있지 않기 때문에 영원히 기능하지 않을 수 있습니다).언젠가 그 링크들이 끊어질 경우를 대비해서 페이스트빈에 코드를 올려놨어요
"사실이라고 생각되는 것"과 "사실이라고 생각되지 않는 것"의 경계는 매우 자의적입니다. 제가 사용한 데이터는 제 욕구와 미적 취향에 따라 분류되며, 여러분의 데이터는 다를 수 있습니다.
이 구조를 이용해서 현을 불란으로 변형시키는 거야true기타 대부분의 값:
$str = "true";
$bool = !in_array($str, array("false", "", "0", "no", "off"));
PHP에 "true"와 "false" 문자열을 부울로 해석하는 함수가 있습니까?
아니요 - 둘 다 문자열이고 둘 다 (말씀하신 대로) 평가합니다.true. 빈 문자열만 평가됩니다.falsePHP로 설정합니다.
이를 위해 수동으로 테스트해야 합니다.그러나 가능하다면 대신 "실제" 부울 값을 사용하는 것이 좋습니다.
부울로 안전하게 변환하는 가장 쉬운 방법
$flag = 'true';
if( filter_var( $flag,FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE ) !== null) {
$flag = filter_var($flag,FILTER_VALIDATE_BOOLEAN);
}
gettype($flag); // Would Return 'Boolean'
echo 'Val: '.$flag; // Would Output 'Val: 1'
API가 "true" 또는 "false" 문자열만 허용하고 다른 문자열은 모두 이 될 경우 다음을 시도해 보십시오.
$boolean = ['true' => true, 'false' => false][$inputString] ?? null;
이것은 다음과 같은 것을 전제로 한다.$input오브젝트가 아닙니다.Null 병합(??)는 PHP 7.0에서 도입되었습니다.
언급URL : https://stackoverflow.com/questions/4775294/parsing-a-string-into-a-boolean-value-in-php
'source' 카테고리의 다른 글
| 웹 서버에서 중첩된 산술 MySQL 쿼리에 대한 문제 (0) | 2023.01.05 |
|---|---|
| Python 객체가 문자열인지 확인하는 방법 (0) | 2023.01.05 |
| 빈 열을 데이터 프레임에 추가하려면 어떻게 해야 합니까? (0) | 2023.01.05 |
| MySQL 클러스터 또는 MariaDB Galera (0) | 2023.01.05 |
| C 또는 C++의 작은따옴표 대 큰따옴표 (0) | 2023.01.05 |