Как преобразовать строку в boolean 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 false
.
Ответы
Ответ 1
Строки всегда оценивают значение boolean true, если они не имеют значения, которые считаются "пустыми" из PHP (взяты из документации для empty
)
-
""
(пустая строка);
-
"0"
(0 в виде строки)
Если вам нужно установить логическое значение на основе текстового значения строки, вам нужно будет проверить наличие или иное значение этого значения.
$test_mode_mail = $string === 'true'? true: false;
EDIT: приведенный выше код предназначен для ясности понимания. При фактическом использовании более подходящим может быть следующий код:
$test_mode_mail = ($string === 'true');
Ответ 2
Этот метод был отправлен @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
Ответ 3
Строка "false"
фактически считается значением "TRUE"
по PHP.
В документации указано:
Чтобы явно преобразовать значение в boolean, используйте (bool) или (boolean) слепки. Однако в большинстве случаев бросок не нужен, поскольку значение будет автоматически преобразовано, если оператор, функция или управление Структура требует логического аргумента.
См. также Тип Жонглирование.
При преобразовании в boolean следующие значения считаются FALSE:
-
сама логическая ЛОЖЬ
-
целое число 0 (ноль)
-
поплавок 0.0 (ноль)
-
пустая строка, а строка "0"
-
массив с нулевыми элементами
-
объект с нулевыми переменными-членами (только для PHP 4)
-
специальный тип NULL (включая неустановленные переменные)
-
Объекты SimpleXML, созданные из пустых тегов
Каждое другое значение считается TRUE (включая любой ресурс).
поэтому если вы выполните:
$bool = (boolean)"False";
или
$test = "false";
$bool = settype($test, 'boolean');
в обоих случаях $bool
будет TRUE
. Поэтому вы должны сделать это вручную, как предлагает GordonM.
Ответ 4
При работе с JSON мне пришлось отправлять логическое значение через $_POST
. У меня была похожая проблема, когда я сделал что-то вроде:
if ( $_POST['myVar'] == true) {
// do stuff;
}
В приведенном выше коде мой логический тип был преобразован в строку JSON.
Чтобы преодолеть это, вы можете декодировать строку, используя json_decode()
:
//assume that : $_POST['myVar'] = 'true';
if( json_decode('true') == true ) { //do your stuff; }
(Обычно это должно работать с логическими значениями, преобразованными в строку и отправленными на сервер и другими способами, т.е. Отличными от использования JSON.)
Ответ 5
вы можете использовать json_decode для декодирования, что boolean
$string = 'false';
$boolean = json_decode($string);
if($boolean) {
// Do something
} else {
//Do something else
}
Ответ 6
(boolean)json_decode(strtolower($string))
Он обрабатывает все возможные варианты $string
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
Ответ 7
проще всего это сделать:
$str = 'TRUE';
$boolean = strtolower($str) == 'true' ? true : false;
var_dump($boolean);
Выполняя это, вы можете пропустить цикл "true", "TRUE", "false" или "FALSE" и получить значение строки в логическом виде.
Ответ 8
Если ваша "логическая" переменная поступает из глобального массива, такого как $_POST и $_GET, вы можете использовать функцию фильтра filter_input()
.
Пример для POST:
$isSleeping = filter_input(INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN);
Если ваша "логическая" переменная поступает из другого источника, вы можете использовать функцию фильтра filter_var()
.
Пример:
filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
Ответ 9
Вы можете использовать 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
Ответ 10
Другие ответы более усложняют ситуацию. Этот вопрос - это просто логический вопрос. Просто верните свое утверждение.
$boolString = 'false';
$result = 'true' === $boolString;
Теперь ваш ответ будет либо
-
false
, если строка была 'false'
,
- или
true
, если ваша строка 'true'
.
Я должен отметить, что filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
по-прежнему будет лучшим вариантом , если вам нужны строки типа on/yes/1
как псевдоним для true
.
Ответ 11
function stringToBool($string){
return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}
или
function stringToBool($string) {
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
Ответ 12
Вы также можете использовать метод settype!
SetType ($ Var, "Boolean" )
Echo $var//см. 0 или 1
Ответ 13
Ответ от @GordonM хорош.
Но это не сработает, если $string
уже true
(т.е. Строка не строка, а логическая TRUE)... которая кажется нелогичной.
Расширяя свой ответ, я бы использовал:
$test_mode_mail = ($string === 'true' OR $string === true));
Ответ 14
Я делаю это таким образом, чтобы на любой логической строке строка "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;
}
Ответ 15
Я запутался в атрибутах shortcode 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']);
Ответ 16
От php.net
public function strictBool($val=false){
return is_integer($val)?false:$val == 1;
}
Ответ 17
Отредактировано, чтобы показать возможность, не упомянутую здесь, потому что мой первоначальный ответ был далеко не связан с вопросом ОП.
preg_match(); Возможно использовать. Тем не менее, в большинстве приложений это будет гораздо тяжелее, чем другие ответы здесь.
if (preg_match("/true/i", "true PHP is a web scripting language of choice.")) {
echo "<br><br>Returned true";
} else {
echo "<br><br>Returned False";
}
/(?:true)|(?:1)/i
Может также использоваться при необходимости в определенных ситуациях. Он не вернется правильно, когда оценивает строку, содержащую как "ложь", так и "1".
Ответ 18
хмммм у меня была такая проблема, и я сделал в простой форме, и она работает нормально
$string = 'false';
if( $string == 'true'){
$string = true;
}else if($string == 'false'){
$string= false;
}
Ответ 19
Я использую следующий подход:
$test = "true";
$test == 'false' ? $test = false : $test = true;
echo $test;
if(empty($test)){
echo "IT IS FALSE";
}
if($test){
echo "IT IS TRUE";
}
Ответ 20
Простым способом является проверка на массив значений, который вы считаете истинным.
$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);
Ответ 21
Вы должны иметь возможность использовать boolean using (bool), но я не уверен, не проверяя, работает ли это в строках "true" и "false".
Это может стоить популярность, хотя
$myBool = (bool)"False";
if ($myBool) {
//do something
}
Стоит знать, что следующее будет оцениваться логическим False при вводе внутри
if()
- сама логическая ЛОЖЬ
- целое число 0 (ноль)
- поплавок 0.0 (ноль)
- пустая строка и строка "0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами (только для PHP 4)
- специальный тип NULL (включая неустановленные переменные)
- Объекты SimpleXML, созданные из пустых тегов
Все остальные будут оцениваться как true.
Как описано здесь:
http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting