Как конвертировать string в логический php
как я могу преобразовать строку boolean
?
$string = 'false';
$test_mode_mail = settype($string,'boolean');
var_dump($test_mode_mail);
if($test_mode_mail) echo 'test mode is on.';
он возвращает,
boolean значение true
но он должен быть!--2-->.
18 ответов
строки всегда оцениваются как boolean true, если они не имеют значения, которое считается "пустым" PHP (взято из документация empty
):
-
""
(пустая строка); -
"0"
(0 в виде строки)
Если вам нужно установить логическое значение на основе текстового значения строки, вам нужно будет проверить наличие или иначе этого значения.
$test_mode_mail = $string === 'true'? true: false;
EDIT: приведенный выше код предназначен для ясность понимания. При фактическом использовании следующий код может быть более подходящим:
$test_mode_mail = ($string === 'true');
этот метод был опубликован @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
Строка "false"
фактически считается "TRUE"
значение по PHP.
В документации говорится:
чтобы явно преобразовать значение в логическое, используйте (bool) или (boolean) забросы. Однако в большинстве случаев приведение не требуется, так как значение будет автоматически преобразован если оператор, функция или управление структура требует логического аргумента.
см. Также передергивания типа.
при преобразовании в boolean, следующие значения считаются ложными:
сам логический FALSE
целое число 0 (ноль)
поплавок 0.0 (ноль)
пустая строка и строка "0"
массив с нулевыми элементами
объект с нулевыми переменными-членами (только PHP 4)
специальный тип NULL (включая unset переменные)
объекты SimpleXML, созданные из пустых тегов
каждое другое значение считается истинным (включая любой ресурс).
если вы:
$bool = (boolean)"False";
или
$test = "false";
$bool = settype($test, 'boolean');
в обоих случаях $bool
будет TRUE
. Поэтому вы должны сделать это вручную, как предлагает Гордонм.
при работе с JSON мне пришлось отправить логическое значение через $_POST
. У меня была аналогичная проблема, когда я сделал что-то вроде:
if ($_POST['myVar'] == true) {
// do stuff;
}
в приведенном выше коде мое логическое значение было преобразовано в строку JSON.
чтобы преодолеть это, вы можете декодировать строку с помощью json_decode()
:
if( json_decode($_POST['myVar']) == true ) { //do your stuff; }
(обычно это должно работать с логическими значениями, преобразованными в строку и отправленными на сервер также другими средствами, т. е., Кроме использования JSON.)
вы можете использовать json_decode для декодирования этого логического
$string = 'false';
$boolean = json_decode($string);
if($boolean) {
// Do something
} else {
//Do something else
}
(boolean)json_decode(strtolower($string))
она обрабатывает все возможные варианты $string
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
проще всего сделать это так:
$str = 'TRUE';
$boolean = strtolower($str) == 'true' ? true : false;
var_dump($boolean);
делая это таким образом, вы можете выполнить цикл через ряд "true", "TRUE", "false" или "FALSE" и получить строковое значение в логическое.
другие ответы более усложняя вещи. Этот вопрос просто логика вопрос. Просто сделай свое заявление правильно.
$boolString = 'false';
$result = 'true' === $boolString;
теперь ваш ответ будет либо
-
false
, если строка'false'
, - или
true
, если строка'true'
.
Я должен отметить, что filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
еще будет лучше вариант если вы должны иметь строки, как on/yes/1
как псевдоним true
.
function stringToBool($string){
return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}
или
function stringToBool($string) {
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
Я делаю это таким образом, чтобы привести любую нечувствительную к регистру версию строки "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;
}
ответ @GordonM - это хорошо.
Но он потерпит неудачу, если $string
уже true
(т. е. строка не является строкой, а логическим TRUE)...что кажется нелогичным.
расширяя свой ответ, я бы использовал:
$test_mode_mail = ($string === 'true' OR $string === true));
если ваша" логическая " переменная происходит из глобального массива, такого как $_POST и $_GET, вы можете использовать filter_input()
функции фильтра.
пример для поста:
$isSleeping = filter_input(INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN);
если ваша переменная "boolean" происходит из другого источника, вы можете использовать filter_var()
функции фильтра.
пример:
filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
можно использовать 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
strval сделает это и многое другое.
См. документы. http://php.net/manual/en/function.strval.php
$my_istrue = true;
echo 'hi '.strval($my_istrue); // returns "hi 1"
Я запутался с атрибутами шорткода 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']);
простой способ-проверить массив значений, которые вы считаете истинными.
$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);
вы должны иметь возможность привести к логическому использованию (bool), но я не уверен, не проверяя, работает ли это на строках "true" и "false".
Это может стоить поп, хотя
$myBool = (bool)"False";
if ($myBool) {
//do something
}
стоит знать, что следующее будет оценивать логическое значение False при вводе внутрь
if()
- сам логический FALSE
- целое число 0 (ноль)
- поплавок 0.0 (ноль)
- пустая строка, и строку "0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только PHP 4)
- специальный тип NULL (включая unset переменные)
- объекты SimpleXML, созданные из пустых тегов
все остальное будет оцениваться как true.
а где здесь: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting