No Image

Php привести к целому числу

СОДЕРЖАНИЕ
17 просмотров
10 марта 2020

В PHP преобразовать строку в число в PHP можно тремя способами. Функцией bool settype (mixed &var, string type) , функцией int intval(mixed var [,int base]) или приведением к типу — (int) или (integer) .

Пример

Например есть строка "123" нужно преобразовать ее в тип integer .

Приведение к типу (int)

settype()

intval()

Быстродействие

В плане быстродействия самым быстрым оказался первый способ (приведение к типу — (int)$str ), номером 2 оказался способ settype() и самым медленным оказался способ intval() .

Скорость измерялась обычным способом, строка "123" 1 миллион раз преобразовывалась в тип int .

Приведение типа — это преобразование значения одного типа в значение другого типа.

Есть два вида приведения типов:

Неявное приведение типа выполняется интерпретатором автоматически, без непосредственного участия программиста. Например, значение будет автоматически преобразовано, если оператор ожидает, числовые операнды:

Чтобы выполнить явное приведение, нужно указать в круглых скобках имя требуемого типа непосредственно перед приводимым значением или переменной:

Запись имени типа в круглых скобках называется оператором приведения типа. Допускаются следующие операторы приведения типов:

  • (int), (integer) — приведение к integer .
  • (bool), (boolean) — приведение к boolean .
  • (float), (double), (real) — приведение к float .
  • (string) — приведение к string .
  • (array) — приведение к array .
  • (object) — приведение к object .
  • (unset) — приведение к NULL .

Приведение к целому числу

При приведении bool в integer , FALSE преобразуется в 0 (нуль), а TRUE — в 1 (единицу). При приведении float в integer , дробная часть будет округлена в сторону нуля. Значение NULL преобразуется в 0:

Строки преобразуются по следующим правилам:

  • Если первый символ строки является цифрой, знаком + или – , то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ отличный от цифры, после этого интерпретатор возвращает полученное целое число.
  • Если строка пустая или первый символ строки не является цифрой, знаком + или – , она преобразуется в 0.

Для других типов поведение преобразования в integer не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.

Приведение к числу с плавающей точкой

Строки преобразуются по следующим правилам:

  • Если первый символ строки является цифрой, точкой, знаком + или – , то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, точкой (если перед этим была цифра), буквой e или E (если перед этим была цифра или точка), то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ, который не может быть преобразован в числовое значение, после этого интерпретатор возвращает полученное число с плавающей точкой.
  • Если строка пустая или первый символ строки не является цифрой, точкой, знаком + или – , она преобразуется в 0.

Значения других типов сначала преобразуются в integer , а затем уже из integer происходит преобразование в тип float .

Приведение к булеву типу

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

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

Все остальные значения при преобразовании дают в результате значение TRUE . Значение FALSE и шесть значений, которые при преобразовании приводятся к этому значению, обычно называют ложными значениями, а все остальные — истинными:

В любом контексте, когда интерпретатор PHP ожидает получить булево значение, ложные значения интерпретируются как FALSE , а истинные значения — как TRUE .

Читайте также:  Как взять деньги в долг мтс россия

Приведение к строке

Булево значение TRUE преобразуется в строку "1", а значение FALSE преобразуется в "" (пустую строку):

Целое число или число с плавающей точкой преобразуется в строку, состоящую из цифр числа:

Массивы всегда преобразуются в строку "Array" :

NULL всегда преобразуется в пустую строку:

Resource всегда преобразуется в строку вида "Resource id #1" .

Для преобразования объекта в строку, объект должен иметь метод __toString() :

Если объект не имеет метод __toString() , то в результате преобразования будет вызвана фатальная ошибка:

Приведение к NULL

Приведение к типу NULL не удаляет переменную и её значение, а лишь возвращает значение типа NULL :

PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется согласно контексту, в котором она используется. То есть, если вы присвоите строковое значение переменной $var , $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом.

Примером автоматического преобразования типа является оператор сложения ‘+‘. Если любой из операндов является числом с плавающей точкой, то все операнды интерпретируются как числа с плавающей точкой, результатом будет также число с плавающей точкой. В противном случае операнды будут интерпретироваться как целые числа и результат также будет целочисленным. Обратите внимание, что это НЕ меняет типы самих операндов; меняется только то, как они вычисляются. Некоторые практические примеры:

= "0" ; // $foo это строка (ASCII 48)
$foo += 2 ; // $foo теперь целое число (2)
$foo = $foo + 1.3 ; // $foo теперь число с плавающей точкой (3.3)
$foo = 5 + "10 Little Piggies" ; // $foo это целое число (15)
$foo = 5 + "10 Small Pigs" ; // $foo это целое число (15)
?>

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

Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите settype().

Если вы хотите протестировать любой из примеров, приведенных в данном разделе, вы можете использовать функцию var_dump().

Приведение типов

Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной. Пример:

= 10 ; // $foo это целое число
$bar = (boolean) $foo ; // $bar это булев тип
?>

Допускаются следующие приведения типов:

(int), (integer) – приведение к целому числу

(bool), (boolean) – приведение к булеву типу

(float), (double), (real) – приведение к числу с плавающей точкой (float)

(string) – приведение к строке

(array) – приведение к массиву

(object) – приведение к объекту

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

= (int) $bar ;
$foo = ( int ) $bar ;
?>

Совет: вместо приведения переменной к строке, вы можете заключить ее в двойные кавычки.

= 10 ; // $foo это целое число
$str = "$foo" ; // $str это строка
$fst = (string) $foo ; // $fst это также строка

// Это напечатает "они одинаковы"
if ( $fst === $str ) <
echo "они одинаковы" ;
>
?>

Преобразование в тип Boolean (двоичные данные)

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

При преобразовании в логический тип, следующие значения рассматриваются как 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)
?>

Преобразование в тип Integer (целые числа)

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

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

FALSE преобразуется в 0 (ноль), а TRUE – в 1 (единицу).

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

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

Если число с плавающей точкой превышает пределы целого (как правило, это +/- 2.15e+9 = 2^31 ), результат будет неопределенным, так как целое не имеет достаточной точности, чтобы вернуть верный результат. В этом случае не будет выведено ни предупреждения, ни даже замечания

Внимание! Никогда не приводите неизвестную дробь к целому, так как это может иногда дать неожиданные результаты, например:

echo (int) ( ( 0.1 + 0.7 ) * 10 ); // выводит 7!
?>

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

Преобразования из других типов

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

Преобразование в тип Float (числа с плавающей точкой)

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

Преобразование в тип String (строки)

Вы можете преобразовать значение в строку, используя приведение (string) , либо функцию strval(). В выражениях, где необходима строка, преобразование происходит автоматически. Это происходит, когда вы используете функции echo() или print(), либо когда вы сравниваете значение переменной со строкой. Ознакомление с разделами "Типы данных" и "Манипуляции с типами" позволяет вам лучше понимать суть. Смотрите также settype().

Булево (boolean) значение TRUE преобразуется в строку "1" , а значение FALSE представляется как "" (пустая строка). Этим способом вы можете преобразовывать значения в обе стороны – из булева типа в строковый и наоборот.

Целое ( integer) или число с плавающей точкой ( float) преобразуется в строку, представленную числом, состоящим из его цифр (включая показатель степени для чисел с плавающей точкой).

Массивы всегда преобразуются в строку "Array" , так что вы не можете отобразить содержимое массива (array), используя echo() или print(), чтобы узнать, что он содержит. Чтобы просмотреть один элемент, вам нужно сделать что-то вроде echo $arr[‘foo’] . Смотрите ниже советы о том, как отобразить/просмотреть все содержимое.

Объекты всегда преобразуются в строку "Object" . Если вы хотите вывести значение переменной-члена объекта (object) с целью отладки, прочтите следующие абзацы. Если вы хотите получить имя класса требуемого объекта, используйте get_class().

Читайте также:  Как посмотреть скрытые аудиозаписи друзей

Ресурсы всегда преобразуются в строки со структурой "Resource id #1" , где 1 – это уникальный номер ресурса (resource), присвоенный ему PHP во время выполнения. Если вы хотите получить тип ресурса, используйте get_resource_type().

NULL всегда преобразуется в пустую строку.

Вывод массивов, объектов или ресурсов не предоставляет вам никакой полезной информации о самих значениях. Более подходящий способ вывода значений для отладки – использовать функции print_r() и var_dump().

Вы также можете преобразовать значения PHP в строки для постоянного хранения. Этот метод называется сериализацией и может быть выполнен при помощи функции serialize(). Кроме того, если в вашей установке PHP есть поддержка WDDX, вы можете сериализовать значения PHP в структуры XML.

Преобразование в тип Array (массивы)

Для любого из типов: integer, float, string, boolean и resource, если вы преобразуете значение в массив, вы получите массив с одним элементом (с индексом 0), являющимся скалярным значением, с которого вы начали.

Если вы преобразуете в массив объект (object), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов.

Если вы преобразуете в массив значение NULL, вы получите пустой массив.

Преобразование в тип Object (объекты)

Если объект преобразуется в объект, он не изменяется. Если же в объект преобразуется значение любого иного типа, создается новый экземпляр встроенного класса stdClass . Если значение было пустым, новый экземпляр также будет пустым. При любом другом значении оно будет содержатся в переменной-члене scalar :

= (object) ‘ciao’ ;
echo $obj -> scalar ; // выведет ‘ciao’
?>

Преобразование в тип Resource (ресурсы)

Поскольку тип ресурс содержит специальные указатели на открытые файлы, соединения с базой данных, область изображения и тому подобное, вы не можете преобразовать какое-либо значение в ресурс.

Преобразование строк в числа

Если строка распознается как числовое значение, результирующее значение и тип определяется так как показано далее.

Строка будет распознана как float, если она содержит любой из символов ‘.’, ‘e’, или ‘E’. Иначе она будет определена как целое.

Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение – это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени – это ‘e’ или ‘E’ с последующими одной или более цифрами.

= 1 + "10.5" ; // $foo это float (11.5)
$foo = 1 + "-1.3e3" ; // $foo это float (-1299)
$foo = 1 + "bob-1.3e3" ; // $foo это integer (1)
$foo = 1 + "bob3" ; // $foo это integer (1)
$foo = 1 + "10 Small Pigs" ; // $foo это integer (11)
$foo = 4 + "10.2 Little Piggies" ; // $foo это float (14.2)
$foo = "10.0 pigs " + 1 ; // $foo это float (11)
$foo = "10.0 pigs " + 1.0 ; // $foo это float (11)
?>

Более подробную информацию об этом преобразовании смотрите в разделе о strtod(3) документации Unix.

Если вы хотите протестировать любой из примеров этого раздела, вы можете скопировать и вставить его и следующую строку, чтобы увидеть, что происходит:

echo "$foo==$foo; тип: " . gettype ( $foo ) . "
" ;
?>

Не ожидайте получить код символа, преобразовав его в целое (как вы могли бы сделать, например, в Си). Для преобразования символов в их коды и обратно используйте функции ord() и chr().

Комментировать
17 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock detector