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

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

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

Целые числа

Пусть, к примеру, у нас есть строка с цифрами:

Давайте преобразуем ее в целое число. Для этого используем специальную команду int , вот так:

Можно воспользоваться командой преобразования прямо в вызове функции:

Можно преобразовать значение переменной:

Преобразуйте следующую строку в число:

Дробные числа

Пусть теперь у нас есть строка с дробным числом:

Для преобразования этой строки в число следует воспользоваться командой float :

Преобразуйте следующую строку в число:

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

Использование команды int для дроби приведет к тому, что от дроби извлечется только целая часть:

Аналогичным образом команда сработает в том случае, если у нас не строка с дробью, а просто дробь как число:

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

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

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

  • явное
  • неявное

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

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

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

  • (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

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

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

Вы можете использовать (int) или (integer) , чтобы преобразовать переменную в целое число, использовать (float) , (double) или (real) , чтобы преобразовать переменную в float (десятичное число). Точно так же вы можете использовать (string) для преобразования переменной в строку и т. д.

Функция PHP gettype() возвращает « double » в случае числа с плавающей запятой по историческим причинам.

В качестве альтернативы вы также можете использовать функцию intval() для получения целочисленного значения переменной.

Манипуляции с типами

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

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

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

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

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

Замечание: Поведение автоматического преобразования в массив в настоящий момент не определено.

Поскольку PHP поддерживает индексирование в строках с использованием такого же синтаксиса, как и при индексировании массива, вышеприведенный пример приводит к проблеме: следует ли $a стать массивом, первым элементом которого будет «f» или «f» должна стать первым символом строки $a?

Текущая версия PHP воспринимает второе присваивание как определение смещения строки, поэтому $a станет «f», результат же этого автоматического преобразования следует, однако, рассматривать как неопределенный. В PHP 4 для доступа к символам строки был введен новый синтаксис фигурных скобок, используйте этот синтаксис вместо вышеприведенного:

Для дополнительной информации смотрите раздел Доступ к символу в строке.

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

    Допускаются следующие приведения типов:
  • (int), (integer) — приведение к целому числу
  • (bool), (boolean) — приведение к булеву типу
  • (float), (double), (real) — приведение к числу с плавающей точкой (float)
  • (string) — приведение к строке
  • (array) — приведение к массиву
  • (object) — приведение к объекту

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

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

Возможно, вам не совсем ясно, что происходит при приведении между типами. Для дополнительной информации смотрите разделы:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *