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.
Базовый пример
Вот наиболее распространённый случай — преобразование строк, содержащих числа, в целые числа, включая недесятичные системы счисления:
Второй аргумент указывает функции 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().