W3docs

intval()

Функция intval() — встроенная функция PHP для преобразования переменной в целое число. Узнайте про синтаксис, параметры и особенности работы.

Введение

Функция intval() возвращает целочисленное значение переменной. Это одна из функций преобразования типов в PHP, наряду с floatval(), strval() и boolval(). intval() используется тогда, когда данные выглядят как число, но хранятся в виде строки, числа с плавающей точкой или другого типа — например, значение из формы, параметр URL или данные из CSV-файла — и вам нужно настоящее целое число для подсчёта, индексации или арифметических операций.

На этой странице рассматриваются сигнатура функции, принцип работы необязательного параметра $base, поведение при каждом типе входных данных и распространённые ошибки.

Синтаксис

intval(mixed $value, int $base = 10): int

Функция принимает до двух параметров и всегда возвращает int:

  • $value — значение для преобразования. Это может быть строка, число с плавающей точкой, boolean, null или массив.
  • $base (необязательный) — числовое основание, в котором интерпретируется $value. Используется только когда $value является строкой; для других типов игнорируется. По умолчанию равен 10.

intval() никогда не выбрасывает исключений и никогда не возвращает null. Если число не удаётся распознать, возвращается 0.

Базовый пример

Вот наиболее распространённый случай — преобразование строк, содержащих числа, в целые числа, включая недесятичные системы счисления:

php— editable, runs on the server

Второй аргумент указывает функции intval(), как читать строку. "101010" в основании 2 — это десятичное 42, а "2c" в основании 16 — это десятичное 44. Строка без ведущей числовой части, например "not a number", возвращает 0.

Преобразование нестроковых типов

При передаче значения не-строкового типа intval() следует обычным правилам приведения к целому числу в PHP и игнорирует $base:

<?php
echo intval(4.7) . "\n";    // 4    (floats are truncated, not rounded)
echo intval(true) . "\n";   // 1    (false → 0)
echo intval(null) . "\n";   // 0
echo intval([]) . "\n";     // 0    (empty array)
echo intval([0]) . "\n";    // 1    (non-empty array)
?>

Два важных момента:

  • Числа с плавающей точкой усекаются к нулю, а не округляются. intval(4.7) равно 4, а intval(-4.7) равно -4. Если нужно округление, используйте сначала round().
  • Массивы преобразуются в 0, если пустые, и в 1, если непустые — почти никогда это не то, что нужно, поэтому не рассчитывайте на такое поведение.

Как парсятся строки

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

<?php
echo intval("12abc") . "\n";    // 12   (stops at "a")
echo intval("  123  ") . "\n";  // 123  (leading whitespace is skipped)
echo intval("abc12") . "\n";    // 0    (starts with a non-number)
?>

Автоматическое определение основания с помощью $base = 0

Если задать $base равным 0, intval() проверяет префикс строки и выбирает основание автоматически:

<?php
echo intval("0x1A", 0) . "\n";   // 26   (0x → hexadecimal)
echo intval("0b101", 0) . "\n";  // 5    (0b → binary)
echo intval("042", 0) . "\n";    // 34   (leading 0 → octal)
echo intval("42", 0) . "\n";     // 42   (no prefix → decimal)
?>

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

Распространённые ошибки

Восьмеричные литералы и восьмеричные строки. Ведущий ноль в исходном коде делает число восьмеричным литералом ещё до того, как intval() начнёт работу, поэтому intval(042) равно 34 (потому что 042 уже равно 34). Но строка "042" в десятичной системе при основании 10 по умолчанию даёт 42. Используйте числа в виде строк, если нужен предсказуемый результат.

$base не влияет на нестроковые значения. intval(255, 16) равно 255, а не 597 — основание игнорируется, потому что 255 уже является целым числом. Передавайте строку, если хотите переинтерпретировать цифры.

Значения вне допустимого диапазона. На 64-битной платформе значение, превышающее PHP_INT_MAX, ограничивается до PHP_INT_MAX, а не переполняется до отрицательного числа.

Когда использовать intval() вместо альтернатив

  • Используйте intval(), когда нужно мягкое преобразование, возвращающее 0 при ошибке и умеющее читать другие системы счисления.
  • Используйте приведение типа (int) ((int)$value) для быстрого приведения только в десятичной системе; оно ведёт себя как intval() с основанием 10.
  • Используйте filter_var($value, FILTER_VALIDATE_INT), когда нужна валидация — оно возвращает false для нецелочисленного ввода вместо молчаливого возврата 0, поэтому можно отличить настоящий 0 от ошибки разбора.

Заключение

intval() преобразует строки, числа с плавающей точкой, логические значения и другие типы в целое число, с необязательным основанием для разбора строк в двоичной, восьмеричной, шестнадцатеричной или любой системе счисления от 2 до 36. Мягкое поведение функции — возврат 0 при ошибке и усечение дробных чисел — делает её удобной, но эта же мягкость может скрывать некорректный ввод, поэтому при необходимости валидации предпочтительнее filter_var(). Для связанных преобразований смотрите floatval(), strval() и gettype().

Практика

Практика
Что делает функция intval() в PHP?
Что делает функция intval() в PHP?
Was this page helpful?