Como converter booleano em string


242

Eu tenho uma variável booleana que eu quero converter em uma string:

$res = true;

Eu preciso que o valor convertido esteja no formato:, "true" "false"não"0" "1"

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

Eu tentei:

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

Mas isso me diz que stringe Stringnão são funções reconhecidas.
Como faço para converter esse booleano em uma string no formato "true"ou "false"no PHP?


1
Função de uso mais recente ((string) $ param [tipo booleano]) {if ($ param) {....}} porque (string) false => "false" não é falso ...
zloctb

Respostas:


361

Solução mais simples:

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


1
Essa é a maneira mais fácil de fazer isso, mas depende do que você precisa, pois pode não ser a melhor solução.
Androme

1
@DoomStone Eu sei que faz 3 anos, mas eu só queria saber o que faz você pensar que, em alguns casos, não é a melhor solução. A ?:notação é o código mais simplificado que podemos apresentar nessa situação.
caiosm1005

1
Por exemplo, para mim, não é a melhor solução para o caso em questão: não tenho certeza de qual é o tipo do valor de retorno; pode ser booleano ou outra coisa. (Chamando uma função que alguém escreveu durante a depuração.) Sua solução converte $ res em booleano, enquanto var_export pode lidar com todos os tipos possíveis.

13
@ user2443147 o tipo sendo booleano é literalmente o primeiro fato mencionado na pergunta. Se você não tem certeza sobre o tipo com o qual está lidando, você tem um conjunto de problemas para começar.
75 de

3
Observe que você precisa de colchetes extras ao misturar concatenação de operador ternário e sequência. echo '<active>' . $res ? 'true' : 'false' . '</active>';não produz o resultado desejado, echo '<active>' . ($res ? 'true' : 'false') . '</active>';produz.
Salman A

194

A função var_export retorna uma representação de string de uma variável, para que você possa fazer isso:

var_export($res, true);

O segundo argumento diz à função para retornar a string em vez de repeti-la.


Resposta perfeita. Este é o "PHP" maneira de obter uma "... uma representação de cadeia parsable de uma variável"
peterchaula

62

Outra maneira de fazer: json_encode( booleanValue )

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

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

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

6
Eu acho que semanticamente usando var_export()é mais em sintonia com a intenção da operação (a menos que alguém está precisando da corda para alguns JSON, que é ;-)
Adam Cameron

3
Isso realmente depende do efeito colateral de que a representação JSON é a mesma que se deseja. Ele também conta com a extensão JSON sendo instalada e ativada, o que pode ser muito provável, mas não é um dado. Portanto, imho esta não é uma solução limpa.
Nick Rice,

35

Consulte var_export


3
Veja a resposta de Christian para mais detalhes. Especificamente, inclua o segundo argumento (verdadeiro).
22613 Jimothy

Esta é uma resposta "somente link", que não atende às diretrizes da SO para uma "Resposta". Por favor, editpara incluir informações relevantes a partir do link no seu post. Embora as informações sejam úteis, elas são deixadas de maneira mais apropriada como um "Comentário" para o OP. Todas as informações necessárias do link devem ser incorporadas na resposta. 1) Se o link se tornar inacessível, esta postagem se tornará inútil. 2) os visitantes não devem ser obrigados a visitar links externos, apenas para descobrirem eles mesmos. Dito isto, links para documentação, fontes ou informações adicionais são altamente incentivados. Obrigado pela sua contribuição.
SherylHohman

12

Você usa strval () ou (string) para converter em string no PHP. No entanto, isso não converte booleano na ortografia real de "verdadeiro" ou "falso", portanto, você deve fazer isso sozinho. Aqui está um exemplo de função:

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

Se $val = true;então strval($val)e (string) $valambos retornam 1.
ABach

9

As outras soluções aqui têm advertências (embora abordem a questão em questão). Se você estiver (1) repetindo tipos mistos ou (2) quiser uma solução genérica que possa exportar como uma função ou incluir em seus utilitários, nenhuma das outras soluções aqui funcionará.

A solução mais simples e mais auto-explicativa é:

// 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;

Porém, a maioria dos desenvolvedores que leem seu código exigirá uma visita a http://php.net/var_export para entender o que osvar_export faz e qual é o segundo parâmetro.

1 var_export

Funciona para booleanentrada, mas também converte todo o resto em uma 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';

Funciona para entrada booleana, mas converte todo o resto (ints, strings) em true / false.

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

3) json_encode()

Os mesmos problemas var_exporte, provavelmente, pior, já json_encodeque não é possível saber se a string truefoi criada como uma string ou um booleano.


var_export()parece ser o melhor para o caso de uso específico, obrigado.
Dr. Gianluigi Zane Zanettini

Para instalações PHP 5.5+, var_export(boolval($var), true)é uma rota de maneira segura de transformar o valor nas cadeias "true" ou "false".
Faintsignal

if (is_bool($res) { $res = $res ? 'true' : 'false'; } << isto não vai funcionar - faltando ) talvez a sua melhor utilização$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleemb Que tal: $value = is_bool($value) ? var_export($value, true) : $value;Desta forma, vivo o valor intacto e apenas altero o booleano para sua representação de string.
dickwan

Na sua primeira linha de código, você tem: $res = $res?? Você quis dizer $res == $res:? Ou até $res === $res:?
SherylHohman

2

Por que simplesmente não fazer assim ?:

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

2

Para mim, eu queria uma representação de string, a menos que fosse null, nesse caso, queria que ela permanecessenull .

O problema com var_export é que ele converte nullem uma string "NULL"e também converte uma string vazia em"''" , o que é indesejável. Não havia solução fácil que eu pudesse encontrar.

Este foi o código que finalmente usei:

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

Curto, simples e fácil de executar uma função também, se você preferir.


1

boolval()funciona para tabelas complicadas nas quais declarar variáveis ​​e adicionar loops e filtros não funcionam. Exemplo:

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

onde $tmpé uma chave usada para transpor outros dados. Aqui, eu queria que a tabela exibisse "Sim" para 1 e nada para 0, então usado (boolval($row['special_case']) ? 'Yes' : '').


1
Quando se boolval(some_expression) ? .. : ..comporta de maneira diferente some_expression ? .. : ..?
Home

1

Isso funciona também para qualquer tipo de valor:

$a = true;

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

código:

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

1

Editado com base na sugestão @ sebastian-norr, apontando que a $boolvariável pode ou não ser verdadeira 0ou 1. Por exemplo, 2resolve ao trueexecutá-lo através de um teste booleano em PHP.

Como solução, usei a conversão de tipo para garantir a conversão $boolpara 0ou 1.
Mas tenho que admitir que a expressão simples $bool ? 'true' : 'false'é muito mais limpa.

Minha solução usada abaixo nunca deve ser usada, LOL.
Aqui está por que não ...

Para evitar repetições, a matriz que contém a representação de string do Boolean pode ser armazenada em uma constante que pode ser disponibilizada em todo o aplicativo.

// 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

Eu não sou um fã da resposta aceita, pois converte qualquer coisa que seja avaliada como falsa em "false"não apenas booleana e vice-versa.

Enfim, aqui está a minha resposta OTT, ele usa a var_exportfunção

var_exportfunciona com todos os tipos de variáveis resource, exceto , eu criei uma função que executará uma conversão regular para string ( (string)), uma conversão estrita ( var_export) e uma verificação de tipo, dependendo dos argumentos fornecidos.

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';

issetnão é necessário aqui. No php, if-test é falso para ambos nulle variable not defined. Pode simplesmente fazer o $converted_res = ( $res ? 'true' : 'false' );que é visto em respostas mais antigas.
precisa

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

Só queria atualizar, em PHP> = 5,50 você pode boolval()fazer a mesma coisa

Referência aqui .


3
É o mesmo que usar(bool) $var;
Al.G.

Obrigado! Isso funcionou para mim em uma mesa complicada. Usou-o assim:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby

4
boolval()segue o caminho inverso, convertendo uma variável de qualquer tipo em bool, não bool em string.
Mike Chamberlain
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.