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?

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

Hobobave
fonte
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.

Christian Davén
fonte
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"
Freez
fonte
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

dev-null-resident
fonte
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"
treznik
fonte
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.

aleemb
fonte
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";
}
boa noite
fonte
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.

Dallas
fonte
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' : '').

motorbaby
fonte
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' )  ); 
}
T.Todua
fonte
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'
asiby
fonte
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();        
    }
}
TarranJones
fonte
0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
MERT DOĞAN
fonte
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)
AbdulRahman AlShamiri
fonte
-2

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

Referência aqui .

Jesse
fonte
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