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


242

문자열로 변환하려는 부울 변수가 있습니다.

$res = true;

: 나는 형식으로 변환 된 값을 필요로 "true" "false"하지"0" "1"

$converted_res = "true";
$converted_res = "false";

난 노력 했어:

$converted_res = string($res);
$converted_res = String($res);

그러나 그것은 저에게 알려 string지고 String기능이 인식되지 않습니다.
이 부울을 PHP 형식 "true"또는 "false"PHP 의 문자열로 어떻게 변환 합니까?


1
최신 사용 함수 ((string) $ param [boolean type]) {if ($ param) {....}} (string) false => "false"가 거짓이 아니기 때문에 ...
zloctb

답변:


361

가장 간단한 해결책 :

$converted_res = $res ? 'true' : 'false';


1
이것이 가장 쉬운 방법이지만, 그것이 가장 좋은 해결책이 아닐 수 있으므로 필요한 것에 달려 있습니다.
Androme

1
@DoomStone 3 년이 지났다는 것을 알고 있지만, 어떤 경우에는 이것이 최상의 솔루션이 아니라고 생각하는 이유를 알고 싶었습니다. ?:표기는 우리가이 상황에서 가지고 올 수있는 가장 간단한 코드입니다.
caiosm1005

1
예를 들어, 현재로서는 최선의 해결책이 아닙니다. 반환 값의 유형이 무엇인지 잘 모르겠습니다. 부울이거나 다른 것일 수 있습니다. (디버깅 중에 다른 사람이 작성한 함수를 호출합니다.) 솔루션은 $ res를 부울로 변환하는 반면 var_export는 가능한 모든 유형을 처리 할 수 ​​있습니다.

13
@ user2443147 부울 형식은 말 그대로 질문에서 언급 한 첫 번째 사실입니다. 다루고있는 유형에 대해 잘 모르면 시작할 다른 모든 문제가 있습니다.
nem75

3
삼항 연산자와 문자열 연결을 혼합 할 때는 추가 대괄호가 필요합니다. echo '<active>' . $res ? 'true' : 'false' . '</active>';원하는 결과를 얻지 echo '<active>' . ($res ? 'true' : 'false') . '</active>';못합니다.
살만 A

194

var_export 함수 는 변수의 문자열 표현을 반환하므로 다음과 같이 할 수 있습니다.

var_export($res, true);

두 번째 인수는 함수가 문자열을 에코하지 않고 반환하도록 지시합니다.


완벽한 답변. 이것은 "... 변수의 구문 분석 가능한 캐릭터 라인 표현"지고의 "PHP"방법입니다
peterchaula가

62

또 다른 방법 : json_encode( booleanValue )

echo json_encode(true);  // string "true"

echo json_encode(false); // string "false"

// null !== false
echo json_encode(null);  // string "null"

6
의미 적으로 사용하는 var_export()것이 작업의 의도와 더 잘 맞다고 생각 합니다 (일부 JSON의 경우 문자열이 필요하지 않는 한 ;-)
Adam Cameron

3
이것은 실제로 JSON 표현이 원하는 것과 동일하다는 부작용에 의존합니다. 또한 설치 및 활성화되는 JSON 확장에 의존하지만 가능성이 높지 않지만 제공되지는 않습니다. 그래서 imho 이것은 깨끗한 해결책이 아닙니다.
Nick Rice

35

var_export 참조


3
자세한 내용은 Christian의 답변 을 참조하십시오 . 특히 두 번째 인수를 포함하십시오 (true).
Jimothy

이것은 "링크 전용"답변이며 "답변"에 대한 SO 지침을 따르지 않습니다. 제발 edit게시물에 링크에서 관련 정보를 포함 할 수 있습니다. 정보는 유용하지만 OP에 대한 "설명"으로 남겨 두는 것이 더 적절합니다. 링크에서 필요한 모든 정보가 답변에 포함되어야합니다. 1) 링크에 접근 할 수 없게되면이 게시물은 쓸모 없게됩니다. 2) 방문자는 외부 링크를 방문 할 필요가 없으며 스스로 알아낼 수 있습니다. 즉, 설명서, 소스 또는 추가 정보에 대한 링크가 권장됩니다. 당신의 기여에 감사드립니다.
SherylHohman

12

PHP에서 strval () 또는 (string)을 사용하여 문자열로 변환합니다. 그러나 이것은 부울을 "true"또는 "false"의 실제 철자로 변환하지 않으므로 직접 수행해야합니다. 함수 예는 다음과 같습니다.

function strbool($value)
{
    return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"

만약 $val = true;다음 strval($val)(string) $val모두 1을 반환
ABach

9

여기에있는 다른 솔루션에는 모두주의 사항이 있습니다 (단지 문제를 다루고 있지만). (1) 혼합 유형을 반복하거나 (2) 함수로 내보내거나 유틸리티에 포함 할 수있는 일반 솔루션을 원하는 경우 다른 솔루션은 작동하지 않습니다.

가장 간단하고 자명 한 솔루션은 다음과 같습니다.

// simplest, most-readable
if (is_bool($res) {
    $res = $res ? 'true' : 'false';
}

// same as above but written more tersely
$res = is_bool($res) ? ($res ? 'true' : 'false') : $res;

// Terser still, but completely unnecessary  function call and must be
// commented due to poor readability. What is var_export? What is its
// second arg? Why are we exporting stuff?
$res = is_bool($res) ? var_export($res, 1) : $res;

그러나 코드를 읽는 대부분의 개발자는 http://php.net/var_export 를 방문 하여 var_export수행 할 작업과 두 번째 매개 변수가 무엇인지 이해해야합니다 .

1. var_export

Works에 대한 booleanA와 다른 입력하지만 개종자 모든 string뿐만 아니라.

// OK
var_export(false, 1); // 'false'
// OK
var_export(true, 1);  // 'true'
// NOT OK
var_export('', 1);  // '\'\''
// NOT OK
var_export(1, 1);  // '1'

2. ($res) ? 'true' : 'false';

부울 입력에 작동하지만 다른 모든 항목 (int, string)을 true / false로 변환합니다.

// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'

삼. json_encode()

문자열 이 문자열인지 아니면 부울 인지 알 수 없으므로 같은 문제 var_export와 아마도 더 나쁜 문제 입니다.json_encodetrue


var_export()특정 사용 사례에 가장 적합한 것 같습니다. 감사합니다.
Dr. Gianluigi Zane Zanettini

PHP 5.5 이상 설치의 var_export(boolval($var), true)경우 값을 문자열 "true"또는 "false"로 변환하는 안전한 방법입니다.
faintsignal

if (is_bool($res) { $res = $res ? 'true' : 'false'; } << 이것은 작동하지 않습니다- ) 아마도 더 나은 사용법이 누락되었습니다$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleemb 어떻습니까 : $value = is_bool($value) ? var_export($value, true) : $value;이 방법으로 값을 그대로 유지하고 부울을 문자열 표현으로 만 변경합니다.
dickwan

당신의 코드 라인에는 다음이 있습니다. $res = $res?? 당신은 의미 했습니까 $res == $res? 또는 심지어 : $res === $res?
SherylHohman

2

왜 이렇게 좋아하지 않습니까? :

if ($res) {
    $converted_res = "true";
}
else {
    $converted_res = "false";
}

2

나를 위해 문자열 표현이 필요하지 않은 경우 문자열 표현을 null원했습니다 null.

var_export의 문제점 null은 문자열 "NULL"로 변환하고 빈 문자열을로 변환한다는 것 "''"입니다. 이는 바람직하지 않습니다. 내가 찾을 수있는 쉬운 해결책이 없었습니다.

이것은 내가 마지막으로 사용한 코드였습니다.

if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;

원하는 경우 짧고 간단하며 쉽게 던질 수 있습니다.


1

boolval()변수 선언 및 루프 및 필터 추가가 작동하지 않는 복잡한 테이블에서 작동합니다. 예:

$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp

where $tmp는 다른 데이터를 바꾸는 데 사용되는 키입니다. 여기서는 테이블에 1은 "Yes"를 표시하고 0은 아무것도 표시하지 않기를 원했습니다 (boolval($row['special_case']) ? 'Yes' : '').


1
언제 boolval(some_expression) ? .. : ..와 다르게 행동 some_expression ? .. : ..합니까?
ToolmakerSteve

1

이것은 모든 종류의 가치에 대해서도 작동합니다.

$a = true;

echo $a                     // outputs:   1
echo value_To_String( $a )  // outputs:   true

암호:

function valueToString( $value ){ 
    return ( !is_bool( $value ) ?  $value : ($value ? 'true' : 'false' )  ); 
}

1

$bool변수가 true 0또는 아닐 수도 있음을 지적하는 @ sebastian-norr 제안에 따라 편집 되었습니다 1. 예를 들어, 2로 확인 truePHP에서 부울 테스트를 통해 실행하는 경우.

해결책으로 타입 캐스팅을 사용 $bool하여 0또는 로 변환되도록했습니다 1.
그러나 나는 단순한 표현 $bool ? 'true' : 'false'이 더 깨끗 하다는 것을 인정해야한다 .

아래에 사용 된 솔루션은 절대 사용해서는 안됩니다. LOL.
여기 왜 안 되나요?

반복을 피하기 위해 부울의 문자열 표현을 포함하는 배열을 상수로 저장하여 응용 프로그램 전체에서 사용할 수 있습니다.

// Make this constant available everywhere in the application
const BOOLEANS = ['true', 'false'];

$bool = true;
echo BOOLEANS[(bool)  $bool]; // 'true'
echo BOOLEANS[(bool) !$bool]; // 'false'

0

나는 거짓으로 평가되는 것을 "false"부울로 또는 그 반대로하지 않기 때문에 받아 들여진 대답의 팬이 아닙니다 .

어쨌든 여기 내 OTT 답변이 var_export있습니다. 기능을 사용합니다 .

var_export를 제외한 모든 변수 유형과 함께 작동합니다 . 제공 된 인수에 따라 resource문자열 ( (string)), 엄격한 캐스트 ( var_export) 및 유형 검사 를 정기적으로 캐스트하는 함수를 만들었습니다 .

if(!function_exists('to_string')){

    function to_string($var, $strict = false, $expectedtype = null){

        if(!func_num_args()){
            return trigger_error(__FUNCTION__ . '() expects at least 1 parameter, 0 given', E_USER_WARNING);
        }
        if($expectedtype !== null  && gettype($var) !== $expectedtype){
            return trigger_error(__FUNCTION__ . '() expects parameter 1 to be ' . $expectedtype .', ' . gettype($var) . ' given', E_USER_WARNING);
        }
        if(is_string($var)){
            return $var;
        }
        if($strict && !is_resource($var)){
            return var_export($var, true);
        }
        return (string) $var;
    }
}

if(!function_exists('bool_to_string')){

    function bool_to_string($var){
        return func_num_args() ? to_string($var, true, 'boolean') : to_string();        
    }
}

if(!function_exists('object_to_string')){

    function object_to_string($var){
        return func_num_args() ? to_string($var, true, 'object') : to_string();        
    }
}

if(!function_exists('array_to_string')){

    function array_to_string($var){
        return func_num_args() ? to_string($var, true, 'array') : to_string();        
    }
}

0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';

isset여기에 필요하지 않습니다. PHP에서, if-test은 모두 거짓 nullvariable not defined. $converted_res = ( $res ? 'true' : 'false' );이전 답변에서 볼 수 있듯이 간단하게 수행 할 수 있습니다.
ToolmakerSteve

0
function ToStr($Val=null,$T=0){

    return is_string($Val)?"$Val"
    :
    (
        is_numeric($Val)?($T?"$Val":$Val)
        :
        (
            is_null($Val)?"NULL"
            :
            (
                is_bool($Val)?($Val?"TRUE":"FALSE")
                :
                (
                    is_array($Val)?@StrArr($Val,$T)
                    :
                    false
                )
            )
        )
    );

}
function StrArr($Arr,$T=0)
{
    $Str="";
    $i=-1;
    if(is_array($Arr))
    foreach($Arr AS $K => $V)
    $Str.=((++$i)?", ":null).(is_string($K)?"\"$K\"":$K)." => ".(is_string($V)?"\"$V\"":@ToStr($V,$T+1));
    return "array( ".($i?@ToStr($Arr):$Str)." )".($T?null:";");
}

$A = array(1,2,array('a'=>'b'),array('a','b','c'),true,false,ToStr(100));
echo StrArr($A); // OR ToStr($A) // OR ToStr(true) // OR StrArr(true)

-2

그냥에서 업데이트 싶었 PHP> = 5.50 당신이 할 수있는 boolval()같은 일을

여기를 참조하십시오 .


3
(bool) $var;
Al.G

감사합니다! 이것은 복잡한 테이블에서 나를 위해 일했습니다. 이처럼 사용"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby

4
boolval()다른 방법으로, bool을 문자열이 아닌 모든 유형의 변수를 bool로 변환합니다.
Mike Chamberlain
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.