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


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은 모두 거짓 null과 variable 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.