How to convert string to boolean php


How can I convert string to boolean?

$string = 'false';

$test_mode_mail = settype($string, 'boolean');


if($test_mode_mail) echo 'test mode is on.';

it returns,

boolean true

but it should be boolean false.

1/20/2019 3:27:09 PM

Accepted Answer

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.

2/11/2020 2:40:25 PM

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


$test = "false";
$bool = settype($test, 'boolean');

in both cases $bool will be TRUE. So you have to do it manually, like GordonM suggests.


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.)


you can use json_decode to decode that boolean

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else


It handles all possible variants of $string

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false

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.


filter_var('true', FILTER_VALIDATE_BOOLEAN); // true

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Email: [email protected]