Php convert string to boolean

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]:

  1. "" [an empty string];
  2. "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

Chủ Đề