How can I convert string to boolean
?
$string = 'false';
$test_mode_mail = settype[$string, 'boolean'];
var_dump[$test_mode_mail];
if[$test_mode_mail] echo 'test mode is on.';
it returns,
boolean true
but it should be boolean false
.
Neuron
4,5784 gold badges32 silver badges53 bronze badges
asked Sep 7, 2011 at 15:54
2
This method was posted by @lauthiamkok in the comments. I'm posting it here as an answer to call more attention to it.
Depending on your needs, you should consider using filter_var[]
with the FILTER_VALIDATE_BOOLEAN
flag.
filter_var[ true, FILTER_VALIDATE_BOOLEAN]; // true
filter_var[ 'true', FILTER_VALIDATE_BOOLEAN]; // true
filter_var[ 1, FILTER_VALIDATE_BOOLEAN]; // true
filter_var[ '1', FILTER_VALIDATE_BOOLEAN]; // true
filter_var[ 'on', FILTER_VALIDATE_BOOLEAN]; // true
filter_var[ 'yes', FILTER_VALIDATE_BOOLEAN]; // true
filter_var[ false, FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ 'false', FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ 0, FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ '0', FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ 'off', FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ 'no', FILTER_VALIDATE_BOOLEAN]; // false
filter_var['asdfasdf', FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ '', FILTER_VALIDATE_BOOLEAN]; // false
filter_var[ null, FILTER_VALIDATE_BOOLEAN]; // false
answered Feb 25, 2013 at 20:13
BradBrad
154k48 gold badges341 silver badges510 bronze badges
4
Strings always evaluate to boolean true unless they have a value that's considered "empty" by
PHP [taken from the documentation for empty
]:
""
[an empty string];"0"
[0 as a string]
If you need to set a boolean based on the text value of a string, then you'll need to check for the presence or otherwise of that value.
$test_mode_mail = $string === 'true'? true: false;
EDIT: the above code is intended for clarity of understanding. In actual use the following code may be more appropriate:
$test_mode_mail = [$string === 'true'];
or maybe use of the filter_var
function may cover more boolean values:
filter_var[$string, FILTER_VALIDATE_BOOLEAN];
filter_var
covers a whole range of values, including the truthy values "true"
, "1"
, "yes"
and "on"
. See here for more details.
answered Sep 7, 2011 at 15:55
GordonMGordonM
30.5k15 gold badges86 silver badges129 bronze badges
10
The String "false"
is actually considered a "TRUE"
value by PHP. The documentation says:
To explicitly convert a value to boolean, use the [bool] or [boolean] casts. However, in most cases the cast is unnecessary, since a value will be automatically converted if an operator, function or control structure requires a boolean argument.
See also Type Juggling.
When converting to boolean, the following values are considered FALSE:
the boolean FALSE itself
the integer 0 [zero]
the float 0.0 [zero]
the empty string, and the string "0"
an array with zero elements
an object with zero member variables [PHP 4 only]
the special type NULL [including unset variables]
SimpleXML objects created from empty tags
Every other value is considered TRUE [including any resource].
so if you do:
$bool = [boolean]"False";
or
$test = "false";
$bool = settype[$test, 'boolean'];
in both cases $bool
will be TRUE
. So you have to do it manually, like GordonM suggests.
Nhan
3,5486 gold badges31 silver badges37 bronze badges
answered Sep 7, 2011 at 16:04
wosiswosis
1,16910 silver badges14 bronze badges
1
When working with JSON, I had to send a Boolean value via $_POST
. I had a similar problem when I did something like:
if [ $_POST['myVar'] == true] {
// do stuff;
}
In the code above, my Boolean was converted into a JSON string.
To overcome this, you can decode the string using json_decode[]
:
//assume that : $_POST['myVar'] = 'true';
if[ json_decode['true'] == true ] { //do your stuff; }
[This should normally work with Boolean values converted to string and sent to the server also by other means, i.e., other than using JSON.]
answered Nov 2, 2014 at 19:27
0
you can use json_decode to decode that boolean
$string = 'false';
$boolean = json_decode[$string];
if[$boolean] {
// Do something
} else {
//Do something else
}
answered Jul 27, 2016 at 14:44
isnvi23h4isnvi23h4
1,8081 gold badge25 silver badges43 bronze badges
2
[boolean]json_decode[strtolower[$string]]
It
handles all possible variants of $string
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
answered Jun 20, 2017 at 10:31
mrdedmrded
4,2442 gold badges32 silver badges34 bronze badges
2
If your "boolean" variable comes from a global array such as $_POST and $_GET, you can use filter_input[]
filter function.
Example for POST:
$isSleeping = filter_input[INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN];
If your "boolean" variable comes from other source you can use filter_var[]
filter function.
Example:
filter_var['true', FILTER_VALIDATE_BOOLEAN]; // true
answered Nov 23, 2017 at 9:03
SandroMarquesSandroMarques
5,2571 gold badge39 silver badges40 bronze badges
the easiest thing to do is this:
$str = 'TRUE';
$boolean = strtolower[$str] == 'true' ? true : false;
var_dump[$boolean];
Doing it this way, you can loop through a series of 'true', 'TRUE', 'false' or 'FALSE' and get the string value to a boolean.
answered Apr 19, 2016 at 3:07
1
filter_var[$string, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE];
$string = 1; // true
$string ='1'; // true
$string = 'true'; // true
$string = 'trUe'; // true
$string = 'TRUE'; // true
$string = 0; // false
$string = '0'; // false
$string = 'false'; // false
$string = 'False'; // false
$string = 'FALSE'; // false
$string = 'sgffgfdg'; // null
You must specify
FILTER_NULL_ON_FAILURE
otherwise you'll get always false even if $string contains something else.
answered Jan 15, 2020 at 22:58
ybenhssaienybenhssaien
2,7171 gold badge8 silver badges12 bronze badges
Other answers are over complicating things. This question is simply logic question. Just get your statement right.
$boolString = 'false';
$result = 'true' === $boolString;
Now your answer will be either
false
, if the string was'false'
,- or
true
, if your string was'true'
.
I have to note that filter_var[ $boolString, FILTER_VALIDATE_BOOLEAN ];
still will be a better option if you need to have strings like on/yes/1
as alias for true
.
answered Sep 3, 2013 at 16:49
kaiserkaiser
21.1k16 gold badges87 silver badges106 bronze badges
0
function stringToBool[$string]{
return [ mb_strtoupper[ trim[ $string]] === mb_strtoupper ["true"]] ? TRUE : FALSE;
}
or
function stringToBool[$string] {
return filter_var[$string, FILTER_VALIDATE_BOOLEAN];
}
answered Aug 20, 2014 at 14:24
DmitryDmitry
1,0752 gold badges11 silver badges19 bronze badges
I do it in a way that will cast any case insensitive version of the string "false" to the boolean FALSE, but will behave using the normal php casting rules for all other strings. I think this is the best way to prevent unexpected behavior.
$test_var = 'False';
$test_var = strtolower[trim[$test_var]] == 'false' ? FALSE : $test_var;
$result = [boolean] $test_var;
Or as a function:
function safeBool[$test_var]{
$test_var = strtolower[trim[$test_var]] == 'false' ? FALSE : $test_var;
return [boolean] $test_var;
}
answered Mar 24, 2015 at 18:12
Syntax ErrorSyntax Error
4,3752 gold badges21 silver badges33 bronze badges
The answer by @GordonM is good. But it would fail if the $string
is already true
[ie, the string isn't a string but boolean TRUE]...which seems illogical.
Extending his answer, I'd use:
$test_mode_mail = [$string === 'true' OR $string === true]];
answered Feb 10, 2015 at 9:41
Ema4rlEma4rl
5771 gold badge6 silver badges17 bronze badges
0
I was getting confused with wordpress shortcode attributes, I decided to write a custom function to handle all possibilities. maybe it's useful for someone:
function stringToBool[$str]{
if[$str === 'true' || $str === 'TRUE' || $str === 'True' || $str === 'on' || $str === 'On' || $str === 'ON']{
$str = true;
}else{
$str = false;
}
return $str;
}
stringToBool[$atts['onOrNot']];
answered Mar 13, 2016 at 5:30
2
$string = 'false';
$test_mode_mail = $string === 'false' ? false : true;
var_dump[$test_mode_mail];
if[$test_mode_mail] echo 'test mode is on.';
You have to do it manually
answered Sep 15, 2021 at 13:47
pennypenny
133 bronze badges
You can use the settype method too!
$string = 'false';
$boolean = settype[$string,"boolean"];
var_dump[$boolean]; //see 0 or 1
answered May 11, 2014 at 9:56
NaiNai
4003 silver badges15 bronze badges
1
A simple way is to check against an array of values that you consider true.
$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array[strtolower[$wannabebool],$isTrue];
answered Feb 16, 2017 at 14:20
Edited to show a working solution using preg_match[];
to return boolean true or false based on a string containing true. This may be heavy in comparison to other answers but can easily be adjusted to fit any string to boolean need.
$test_mode_mail = 'false';
$test_mode_mail = 'true';
$test_mode_mail = 'true is not just a perception.';
$test_mode_mail = gettype[$test_mode_mail] !== 'boolean' ? [preg_match["/true/i", $test_mode_mail] === 1 ? true:false]:$test_mode_mail;
echo [$test_mode_mail === true ? 'true':'false']." ".gettype[$test_mode_mail]." ".$test_mode_mail."
";
answered Jul 29, 2015 at 22:12
JSGJSG
3601 gold badge4 silver badges12 bronze badges
2
You should be able to cast to a boolean using [bool] but I'm not sure without checking whether this works on the strings "true" and "false".
This might be worth a pop though
$myBool = [bool]"False";
if [$myBool] {
//do something
}
It is worth knowing that the following will evaluate to the boolean False when put inside
if[]
- the boolean FALSE itself
- the integer 0 [zero]
- the float 0.0 [zero]
- the empty string, and the string "0"
- an array with zero elements
- an object with zero member variables [PHP 4 only]
- the special type NULL [including unset variables]
- SimpleXML objects created from empty tags
Everytyhing else will evaluate to true.
As descried here: //www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
answered Sep 7, 2011 at 16:05
dougajmcdonalddougajmcdonald
18.5k11 gold badges53 silver badges89 bronze badges
3