Como posso converter uma string para boolean
?
$string = 'false';
$test_mode_mail = settype($string, 'boolean');
var_dump($test_mode_mail);
if($test_mode_mail) echo 'test mode is on.';
retorna,
boolean true
mas deveria ser boolean false
.
!!$string1
retornaria um indicativo booleano da sequência descrita na resposta com melhor classificação.Respostas:
As strings sempre avaliam como boolean true, a menos que tenham um valor considerado "vazio" pelo PHP (extraído da documentação de
empty
):""
(uma string vazia);"0"
(0 como uma string)Se você precisar definir um valor booleano com base no valor do texto de uma string, precisará verificar a presença ou não desse valor.
EDIT: o código acima destina-se à clareza de entendimento. No uso real, o código a seguir pode ser mais apropriado:
ou talvez o uso da
filter_var
função possa cobrir mais valores booleanos:filter_var
abrange toda uma gama de valores, incluindo os valores truthy"true"
,"1"
,"yes"
e"on"
. Veja aqui para mais detalhes.fonte
$string === 'true'
filter_var($string, FILTER_VALIDATE_BOOLEAN);
é uma coisa boa?Este método foi postado por @lauthiamkok nos comentários. Estou postando aqui como resposta para chamar mais atenção.
Dependendo das suas necessidades, considere usar
filter_var()
com aFILTER_VALIDATE_BOOLEAN
bandeira.fonte
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
funcionou ainda melhor para mim. Veja php.net/manual/en/function.filter-var.php#121263A String
"false"
é realmente considerada um"TRUE"
valor pelo PHP. A documentação diz:então se você fizer:
ou
em ambos os casos
$bool
seráTRUE
. Então você tem que fazer isso manualmente, como sugere GordonM.fonte
Ao trabalhar com JSON, tive que enviar um valor booleano via
$_POST
. Eu tive um problema semelhante quando fiz algo como:No código acima, meu booleano foi convertido em uma string JSON.
Para superar isso, você pode decodificar a string usando
json_decode()
:(Normalmente, isso deve funcionar com valores booleanos convertidos em string e enviados ao servidor também por outros meios, ou seja, sem usar o JSON.)
fonte
você pode usar json_decode para decodificar esse booleano
fonte
Ele lida com todas as variantes possíveis de
$string
fonte
on
eoff
?Se sua variável "booleana" vier de uma matriz global como $ _POST e $ _GET, você poderá usar a
filter_input()
função de filtro.Exemplo para POST:
Se sua variável "booleana" vier de outra fonte, você poderá usar a
filter_var()
função de filtro.Exemplo:
fonte
Você pode usar
boolval($strValue)
Exemplos:
Documentação http://php.net/manual/es/function.boolval.php
fonte
echo boolval('false');
=> 1echo (int)'false;
ouecho intval('false');
(int)'true'
eintval('true')
tanto de retorno 0, bem como (todas as cordas fazem)a coisa mais fácil a fazer é esta:
Fazendo dessa maneira, você pode percorrer uma série de 'true', 'TRUE', 'false' ou 'FALSE' e obter o valor da string em um valor booleano.
fonte
Outras respostas acabam complicando as coisas. Esta questão é simplesmente uma questão lógica . Apenas acerte sua afirmação.
Agora sua resposta será
false
, se a sequência fosse'false'
,true
, se sua string foi'true'
.Devo observar que
filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
ainda será uma opção melhor se você precisar de strings comoon/yes/1
alias paratrue
.fonte
ou
fonte
Você deve especificar
caso contrário, você sempre será falso, mesmo que $ string contenha outra coisa.fonte
Você também pode usar o método settype!
SetType ($ var, "Boolean") Eco $ var // veja 0 ou 1
fonte
Eu faço isso de uma maneira que converterá qualquer versão que não diferencia maiúsculas de minúsculas da string "false" para o booleano FALSE, mas se comportará usando as regras normais de conversão de php para todas as outras strings. Eu acho que essa é a melhor maneira de evitar comportamentos inesperados.
Ou como uma função:
fonte
A resposta de @GordonM é boa. Mas isso falharia se o
$string
já estivertrue
(isto é, a string não é uma string, mas booleana TRUE) ... o que parece ilógico.Estendendo sua resposta, eu usaria:
fonte
Eu estava ficando confuso com os atributos shortcode do wordpress, decidi escrever uma função personalizada para lidar com todas as possibilidades. talvez seja útil para alguém:
fonte
Uma maneira simples é verificar uma matriz de valores que você considera verdadeiros.
fonte
Editado para mostrar uma possibilidade não mencionada aqui, porque minha resposta original estava longe de estar relacionada à pergunta do OP.
preg_match (); É possível usar. No entanto, na maioria dos aplicativos, será muito mais pesado do que outras respostas aqui.
/(?:true)|(?:1)/i
Também pode ser usado se necessário em determinadas situações. Ele não retornará corretamente quando avaliar uma string contendo "false" e "1".fonte
No PHP, você simplesmente pode converter um valor em um booleano usando double not operator (
!!
):fonte
Você deve conseguir converter para um booleano usando (bool), mas não tenho certeza sem verificar se isso funciona nas cadeias "true" e "false".
Isso pode valer um pop embora
Vale a pena saber que o seguinte avaliará o booleano False quando colocado dentro
Todo o resto avaliará como verdadeiro.
Conforme descrito aqui: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
fonte
"false"
emtrue
.$myBool = (bool)"False"; if ($myBool) { echo "true"; }