Как преобразовать строку в логический php


Как я могу преобразовать строку в boolean?

$string = 'false';

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

var_dump($test_mode_mail);

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

Он возвращает,

Логическое значение true

Но это должно быть boolean false.

Author: dreftymac, 2011-09-07

18 answers

Строки всегда оцениваются как логическое значение true, если только они не имеют значения, которое PHP считает "пустым" (взято из документации для empty):

  1. "" (пустая строка);
  2. "0" (0 в виде строки)

Если вам нужно задать логическое значение на основе текстового значения строки, вам нужно будет проверить наличие или отсутствие этого значения.

$test_mode_mail = $string === 'true'? true: false;

РЕДАКТИРОВАТЬ: Приведенный выше код предназначен для ясности понимания. В фактическом использовании следующий код может быть более подходящим:

$test_mode_mail = ($string === 'true');
 272
Author: GordonM, 2013-08-28 12:09:37

Этот метод был опубликован @lauthiamkok в комментариях. Я публикую его здесь в качестве ответа, чтобы привлечь к нему больше внимания.

В зависимости от ваших потребностей, вам следует рассмотреть возможность использования filter_var() с флагом FILTER_VALIDATE_BOOLEAN.

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(         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
 503
Author: Brad, 2017-01-18 13:47:47

Строка "false" фактически рассматривается PHP как значение "TRUE". В документации говорится:

Чтобы явно преобразовать значение в логическое, используйте (bool) или (логическое) забросы. Однако в большинстве случаев приведение не требуется, так как значение будет автоматически преобразован, если оператор, функция или структура управления требуют логического аргумента.

См. также Тип Жонглирование.

При преобразовании в логическое значение учитываются следующие значения ЛОЖЬ:

  • Само логическое значение FALSE

  • Целое число 0 (ноль)

  • Поплавок 0.0 (ноль)

  • Пустая строка и строка "0"

  • Массив с нулевыми элементами

  • Объект с нулевыми переменными-членами (только PHP 4)

  • Специальный тип NULL (включая неустановленные переменные)

  • Объекты SimpleXML, созданные из пустых тегов

Любое другое значение считается ИСТИННЫМ (включая любой ресурс).

Итак, если вы сделаете:

$bool = (boolean)"False";

Или

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

В обоих случаях $bool будет TRUE. Поэтому вам придется сделать это вручную, как предлагает ГордонМ.

 30
Author: wosis, 2016-12-28 09:55:18

При работе с JSON мне приходилось отправлять логическое значение через $_POST. У меня была похожая проблема, когда я делал что-то вроде:

if ($_POST['myVar'] == true) {
    // do stuff;
}

В приведенном выше коде мое логическое значение было преобразовано в строку JSON.

Чтобы преодолеть это, вы можете декодировать строку с помощью json_decode():

if( json_decode($_POST['myVar']) == true ) { //do your stuff; }

(Обычно это должно работать с логическими значениями, преобразованными в строку и отправленными на сервер также другими способами, т.Е. Помимо использования JSON.)

 14
Author: Nishanth Shaan, 2018-04-03 12:39:22

Вы можете использовать json_decode для декодирования этого логического

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}
 10
Author: souparno majumder, 2016-07-27 14:44:48
(boolean)json_decode(strtolower($string))

Он обрабатывает все возможные варианты $string

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false
 6
Author: mrded, 2017-06-20 10:31:35

Проще всего сделать следующее:

$str = 'TRUE';

$boolean = strtolower($str) == 'true' ? true : false;

var_dump($boolean);

Делая это таким образом, вы можете выполнить цикл из серии "true", "TRUE", "false" или "FALSE" и получить строковое значение в логическое.

 4
Author: Brandon Sanders, 2016-04-19 03:07:26

Другие ответы слишком усложняют ситуацию. Этот вопрос - просто логический вопрос. Просто сделайте свое заявление правильным.

$boolString = 'false';
$result = 'true' === $boolString;

Теперь ваш ответ будет либо

  • false, если строка была 'false',
  • или true, если ваша строка была 'true'.

Я должен отметить, что filter_var( $boolString, FILTER_VALIDATE_BOOLEAN ); все равно будет лучшим вариантом , если вам нужны строки типа on/yes/1 в качестве псевдонима для true.

 3
Author: kaiser, 2013-09-04 13:20:15
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

Или

function stringToBool($string) {
    return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
 3
Author: DevellMen, 2014-08-20 14:24:01

Вы также можете использовать метод settype!

Тип настройки ($var, "Логический") Echo $var//см. 0 или 1

 2
Author: Nai, 2014-05-11 09:56:56

Я делаю это таким образом, что любая нечувствительная к регистру версия строки "false" преобразуется в логическое значение FALSE, но будет вести себя с использованием обычных правил приведения php для всех остальных строк. Я думаю, что это лучший способ предотвратить неожиданное поведение.

$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;

Или как функция:

function safeBool($test_var){
    $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
    return (boolean) $test_var;
}
 2
Author: Syntax Error, 2015-03-24 18:12:25

Ответ от @GordonM хороший. Но это не сработает, если $string уже true (т.Е. Строка не является строкой, а логическим значением TRUE)...что кажется нелогичным.

Расширяя его ответ, я бы использовал:

$test_mode_mail = ($string === 'true' OR $string === true));
 2
Author: Ema4rl, 2016-02-18 17:03:27

Если ваша "логическая" переменная происходит из глобального массива, такого как $_POST и $_GET, вы можете использовать функцию фильтра filter_input().

Пример для ПУБЛИКАЦИИ:

$isSleeping  = filter_input(INPUT_POST, 'is_sleeping',  FILTER_VALIDATE_BOOLEAN);

Если ваша "логическая" переменная поступает из другого источника, вы можете использовать функцию фильтра filter_var().

Пример:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
 1
Author: SandroMarques, 2017-11-23 09:03:57

Вы можете использовать boolval($strValue)

Примеры:

<?php
echo '0:        '.(boolval(0) ? 'true' : 'false')."\n";
echo '42:       '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0:      '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2:      '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"":       '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0":      '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1":      '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]:   '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]:       '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>

Документация http://php.net/manual/es/function .boolval.php

 1
Author: anayarojo, 2018-08-10 19:08:26

Strval сделает это и многое другое.

Посмотрите документы. http://php.net/manual/en/function.strval.php

  $my_istrue = true;
  echo 'hi '.strval($my_istrue); // returns "hi 1"
 0
Author: JSG, 2015-07-29 22:12:39

Я запутался с атрибутами шорткода wordpress, я решил написать пользовательскую функцию для обработки всех возможностей. может быть, это кому-то полезно:

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']);
 0
Author: tomi, 2016-03-13 05:34:49

Простой способ - проверить массив значений, которые вы считаете истинными.

$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);
 0
Author: Tajin, 2017-02-16 14:20:21

Вы должны иметь возможность приводить к логическому значению с помощью (bool), но я не уверен, не проверив, работает ли это со строками "true" и "false".

Возможно, это стоит того, чтобы попробовать

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

Стоит знать, что следующее значение будет равно логическому False, если поместить его внутрь

if()
  • само логическое значение FALSE
  • целое число 0 (ноль)
  • поплавок 0.0 (ноль)
  • пустая строка и строка "0"
  • массив с нулевые элементы
  • объект с нулевыми переменными-членами (только PHP 4)
  • специальный тип NULL (включая неустановленные переменные)
  • Объекты SimpleXML, созданные из пустых тегов

Все остальное будет оценено как истинное.

Как описано здесь: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

 -3
Author: dougajmcdonald, 2011-09-07 16:05:20