Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php bool to string

Как преобразовать строку в boolean php

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

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

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

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

EDIT: приведенный выше код предназначен для ясности понимания. При фактическом использовании следующий код может быть более уместным:

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

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

Строка «false» на самом деле считается значением «TRUE» помощью PHP. В документации говорится:

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

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

При преобразовании в boolean следующие значения считаются FALSE:

сама логическая ЛОЖЬ

целое число 0 (ноль)

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

пустая строка и строка «0»,

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

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

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

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

Каждое другое значение считается TRUE (включая любой ресурс).

поэтому, если вы это сделаете:

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

При работе с Json мне пришлось отправить логическое значение в $ _POST.

У меня была аналогичная проблема, когда я сделал что-то вроде

Так как мой bool был превращен в укус json.

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

(обычно это должно работать с значениями bool, преобразованными в строку и отправленными на сервер также другими способами, кроме использования json)

Пожалуйста, отметьте в качестве ответа, если вы найдете это полезным, спасибо и пожелаете вам много солнца, ciao

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

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

проще всего это сделать:

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

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

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

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

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

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

SetType ($ var, «Boolean») Echo $ var // см. 0 или 1

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

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

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

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

Если ваша «логическая» переменная поступает из глобального массива, такого как $ _POST и $ _GET, вы можете использовать filter_input() filter.

Пример для POST:

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

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

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

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

Вы должны иметь возможность использовать boolean using (bool), но я не уверен, не проверяя, работает ли это в строках «true» и «false».

Это может стоить популярности, хотя

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

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

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

Php bool to string

Это простейший тип. boolean выражает истинность значения. Он может быть либо TRUE , либо FALSE .

Синтаксис

Для указания boolean , используйте константы TRUE или FALSE . Обе они регистронезависимы.

Обычно, некоторый оператор возвращает значение типа boolean , которое потом передается управляющей конструкции.

// == это оператор, который проверяет
// эквивалентность и возвращает boolean
if ( $action == «show_version» ) <
echo «Версия 1.23» ;
>

// это необязательно.
if ( $show_separators == TRUE ) <
echo » n» ;
>

// . потому что следующее имеет тот же самый смысл:
if ( $show_separators ) <
echo » n» ;
>
?>

Преобразование в булев тип

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

При преобразовании в boolean , следующие значения рассматриваются как FALSE :

  • само значение booleanFALSE
  • integer 0 (ноль) и -0 (минус ноль)
  • float 0.0 (ноль) и -0.0 (минус ноль)
  • пустая строка, и строка «0»
  • массив без элементов
  • особый тип NULL (включая неустановленные переменные)
  • Объекты SimpleXML, созданные из пустых тегов

Все остальные значения рассматриваются как TRUE (включая любой resource и NAN ).

-1 рассматривается как TRUE , как и любое другое ненулевое (отрицательное или положительное) число!

User Contributed Notes 24 notes

Ah, yes, booleans — bit values that are either set (TRUE) or not set (FALSE). Now that we have 64 bit compilers using an int variable for booleans, there is *one* value which is FALSE (zero) and 2**64-1 values that are TRUE (everything else). It appears there’s a lot more truth in this universe, but false can trump anything that’s true.

Читать еще:  Php warning division by zero in

PHP’s handling of strings as booleans is *almost* correct — an empty string is FALSE, and a non-empty string is TRUE — with one exception: A string containing a single zero is considered FALSE. Why? If *any* non-empty strings are going to be considered FALSE, why *only* a single zero? Why not «FALSE» (preferably case insensitive), or «0.0» (with how many decimal places), or «NO» (again, case insensitive), or . ?

The *correct* design would have been that *any* non-empty string is TRUE — period, end of story. Instead, there’s another GOTCHA for the less-than-completely-experienced programmer to watch out for, and fixing the language’s design error at this late date would undoubtedly break so many things that the correction is completely out of the question.

Speaking of GOTCHAs, consider this code sequence:
= TRUE ;
$y = FALSE ;
$z = $y OR $x ;
?>

Is $z TRUE or FALSE?

In this case, $z will be FALSE because the above code is equivalent to ( $z = $y ) OR $x ?> rather than =( $y OR $x ) ?> as might be expected — because the OR operator has lower precedence than assignment operators.

On the other hand, after this code sequence:
= TRUE ;
$y = FALSE ;
$z = $y || $x ;
?>

$z will be TRUE, as expected, because the || operator has higher precedence than assignment: The code is equivalent to $z=($y OR $x).

This is why you should NEVER use the OR operator without explicit parentheses around the expression where it is being used.

Note for JavaScript developers:

In PHP, an empty array evaluates to false, while in JavaScript an empty array evaluates to true.

In PHP, you can test an empty array as if(! $stuff ) … ; ?> which won’t work in JavaScript where you need to test the array length.

This is because in JavaScript, an array is an object, and, while it may not have any elements, it is still regarded as something.

Just a trap for young players who routinely work in both langauges.

Beware of certain control behavior with boolean and non boolean values :

// Consider that the 0 could by any parameters including itself
var_dump ( 0 == 1 ); // false
var_dump ( 0 == (bool) ‘all’ ); // false
var_dump ( 0 == ‘all’ ); // TRUE, take care
var_dump ( 0 === ‘all’ ); // false

// To avoid this behavior, you need to cast your parameter as string like that :
var_dump ((string) 0 == ‘all’ ); // false
?>

Just something that will probably save time for many new developers: beware of interpreting FALSE and TRUE as integers.
For example, a small function for deleting elements of an array may give unexpected results if you are not fully aware of what happens:

function remove_element ( $element , $array )
<
//array_search returns index of element, and FALSE if nothing is found
$index = array_search ( $element , $array );
unset ( $array [ $index ]);
return $array ;
>

// this will remove element ‘A’
$array = [ ‘A’ , ‘B’ , ‘C’ ];
$array = remove_element ( ‘A’ , $array );

//but any non-existent element will also remove ‘A’!
$array = [ ‘A’ , ‘B’ , ‘C’ ];
$array = remove_element ( ‘X’ , $array );
?>

The problem here is, although array_search returns boolean false when it doesn’t find specific element, it is interpreted as zero when used as array index.

So you have to explicitly check for FALSE, otherwise you’ll probably loose some elements:

//correct
function remove_element ( $element , $array )
<
$index = array_search ( $element , $array );
if ( $index !== FALSE )
<
unset ( $array [ $index ]);
>
return $array ;
>

Beware that «0.00» converts to boolean TRUE !

You may get such a string from your database, if you have columns of type DECIMAL or CURRENCY. In such cases you have to explicitly check if the value is != 0 or to explicitly convert the value to int also, not only to boolean.

PHP does not break any rules with the values of true and false. The value false is not a constant for the number 0, it is a boolean value that indicates false. The value true is also not a constant for 1, it is a special boolean value that indicates true. It just happens to cast to integer 1 when you print it or use it in an expression, but it’s not the same as a constant for the integer value 1 and you shouldn’t use it as one. Notice what it says at the top of the page:

A boolean expresses a truth value.

It does not say «a boolean expresses a 0 or 1».

It’s true that symbolic constants are specifically designed to always and only reference their constant value. But booleans are not symbolic constants, they are values. If you’re trying to add 2 boolean values you might have other problems in your application.

It is correct that TRUE or FALSE should not be used as constants for the numbers 0 and 1. But there may be times when it might be helpful to see the value of the Boolean as a 1 or 0. Here’s how to do it.

= TRUE ;
$var2 = FALSE ;

echo $var1 ; // Will display the number 1

echo $var2 ; //Will display nothing

/* To get it to display the number 0 for
a false value you have to typecast it: */

echo (int) $var2 ; //This will display the number 0 for false.
?>

Note you can also use the ‘!’ to convert a number to a boolean, as if it was an explicit (bool) cast then NOT.

Читать еще:  Выбор предохранителей для защиты асинхронных электродвигателей

So you can do something like:

= ! 0 ; // This will === true;
$f = ! 1 ; // This will === false;
?>

And non-integers are casted as if to bool, then NOT.

= !array(); // This will === true;
$a = !array( ‘a’ ); // This will === false;
$s = ! «» ; // This will === true;
$s = ! «hello» ; // This will === false;
?>

To cast as if using a (bool) you can NOT the NOT with «!!» (double ‘!’), then you are casting to the correct (bool).

= !!array(); // This will === false; (as expected)
/*
This can be a substitute for count($array) > 0 or !(empty($array)) to check to see if an array is empty or not (you would use: !!$array).
*/

$status = (!! $array ? ‘complete’ : ‘incomplete’ );

$s = !! «testing» ; // This will === true; (as expected)
/*
Note: normal casting rules apply so a !!»0″ would evaluate to an === false
*/
?>

How to convert string to boolean php

How can I convert string to boolean ?

but it should be boolean false .

21 Answers 21

Strings always evaluate to boolean true unless they have a value that’s considered «empty» by PHP (taken from the documentation for empty ):

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.

EDIT: the above code is intended for clarity of understanding. In actual use the following code may be more appropriate:

or maybe use of the filter_var function may cover more boolean values:

filter_var covers a whole range of values, including the truthy values «true» , «1» , «yes» and «on» . See here for more details.

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.

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

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:

In the code above, my Boolean was converted into a JSON string.

To overcome this, you can decode the string using json_decode() :

(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

It handles all possible variants of $string

If your «boolean» variable comes from a global array such as $_POST and $_GET, you can use filter_input() filter function.

Example for POST:

If your «boolean» variable comes from other source you can use filter_var() filter function.

You can use boolval($strValue)

the easiest thing to do is this:

Doing it this way, you can loop through a series of ‘true’, ‘TRUE’, ‘false’ or ‘FALSE’ and get the string value to a boolean.

Other answers are over complicating things. This question is simply logic question. Just get your statement right.

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 .

You must specify otherwise you’ll get always false even if $string contains something else.

You can use settype method too!

SetType($var,»Boolean») Echo $var //see 0 or 1

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.

Or as a function:

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:

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:

I am using the below approach:

hmmmm i had such problem and i did in simple way and its working ok

Edited to show a possibility not mentioned here, because my original answer was far from related to the OP’s question.

preg_match(); Is possible to use. However, in most applications it will be much more heavy to use than other answers here.

/(?:true)|(?:1)/i Can also be used if needed in certain situations. It will not return correctly when it evaluates a string containing both «false» and «1».

A simple way is to check against an array of values that you consider true.

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

Читать еще:  Productinfo php id c

This might be worth a pop though

It is worth knowing that the following will evaluate to the boolean False when put inside

  • 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

Php bool to string

Это простейший тип. Он выражает истинность значения — это может быть либо TRUE, либо FALSE. Булев тип был введен в PHP4.

Чтобы определить булев тип, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.

= True ; // присвоить $x значение TRUE
?>

Обычно используется некий оператор, который возвращает логическое выражение, а затем предает его управляющей конструкции.

// == это оператор, который проверяет
// эквивалентность и возвращает булево значение
if ( $action == «показать_версию» ) <
echo «Версия 1.23» ;
>

// это не обязательно.
if ( $show_separators == TRUE ) <
echo » » ;
>

// . потому что вы можете просто написать
if ( $show_separators ) <
echo » » ;
>
?>

Преобразование в тип Boolean

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

При преобразовании в логический тип, следующие значения рассматриваются как FALSE:


Сам булев FALSE

пустая строка и строка «0»

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

объект с нулевыми переменными-членами

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

Все остальные значения рассматриваются как TRUE (включая любой ресурс).

Внимание! -1 считается TRUE, как и любое ненулевое (отрицательное или положительное) число!

((bool) «» ); // bool(false)
var_dump ((bool) 1 ); // bool(true)
var_dump ((bool) — 2 ); // bool(true)
var_dump ((bool) «foo» ); // bool(true)
var_dump ((bool) 2.3e5 ); // bool(true)
var_dump ((bool) array( 12 )); // bool(true)
var_dump ((bool) array()); // bool(false)
var_dump ((bool) «false» ); // bool(true)
?>

Работа с бинарными данными (тип boolean)

Cтроки могут содержать любые, в том числе и бинарные данные. Для работы с такими строками иногда
удобно использовать функции pack() и unpack().

pack(string $format [,mixed $args, . ])

Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования — наподобие тех, которые указываются в sprintf(), но только без знака %. После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a, A, h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находятся в очередном параметре-строке при вызове функции (то есть, определяется размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся данные. Вот полный список спецификаторов формата:

a — строка, свободные места в поле заполняются символом с кодом 0;
A — строка, свободные места заполняются пробелами;
h — шестнадцатеричная строка, младшие разряды в начале;
H — шестнадцатеричная строка, старшие разряды в начале;
c — знаковый байт (символ);
C — беззнаковый байт;
s — знаковое короткое целое (16 битов, порядок байтов определяется архитекту-
рой процессора);
S — беззнаковое короткое целое;
n — беззнаковое целое (16 битов, старшие разряды в конце);
v — беззнаковое целое (16 битов, младшие разряды в конце);
i — знаковое целое (размер и порядок байтов определяется архитектурой);
I— беззнаковое целое;
l — знаковое длинное целое (32 бита, порядок байтов определяется архитекту-
рой);
L — беззнаковое длинное целое;
N — беззнаковое длинное целое (32 бита, старшие разряды в конце);
V — беззнаковое целое (32 бита, младшие разряды в конце);
f — число с плавающей точкой (зависит от архитектуры);
d — число с плавающей точкой двойной точности (зависит от архитектуры);
x — символ с нулевым кодом;
X — возврат назад на 1 байт;
@ — заполнение нулевым кодом до заданной абсолютной позиции.

Немало, не правда ли? Вот пример использования этой функции:

// Целое, целое, все остальное — символы
$bindata = pack(«nvc*», 0x1234, 0x5678, 65, 66);

После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой последовательности: 0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатеричной системе счисления).

unpack(string $format, string $data)

Функция unpack() выполняет действия, обратные pack() — распаковывает строку $data, пользуясь информацией о формате $format. Возвращает она ассоциативный массив, содержащий элементы распакованных данных. Строка $format задается немного в другом формате, чем в функции pack(), а именно, после каждого спецификатора (или после завершающего его числа) должно «впритык» следовать имя ключа в ассоциативном массиве. Разделяются параметры при помощи символа /. Пример:

В результирующий массив будут записаны элементы с ключами: chars1, chars2 и int. Как видим, если после спецификатора задано число, то к имени ключа будут добавлены номера 1, 2 и т. д., т. е. в массиве появятся несколько ключей, отличающихся суффиксами.
Когда бывают полезны функции pack() и unpack()? Например, вы считали участок GIF-файла, содержащий его размер в пикселах, и хотите преобразовать бинарную 32-битную ячейку памяти в формат, понятный PHP. Или, наоборот, стремитесь работать с файлами с фиксированным размером записи. В этом случае вам и пригодятся рассматриваемые функции. Вообще говоря, функции pack() и unpack() применяются сравнительно редко. Это связано с тем, что в PHP практически все действия, которые могут потребовать работы с бинарными данными (например, анализ файла с рисунком с целью определения его размера), уже реализованы в виде встроенных функций, например, с GIF-картинкой это GetImageSize().

Ссылка на основную публикацию
Adblock
detector