Работа с целочисленными значениями в языке PHP
Работа с целыми числами в PHP
Целочисленный тип (int) в PHP предназначен для хранения целых чисел из диапазона, зависящего от разрядности платформы. На 64-битных системах целые числа занимают 8 байт и могут принимать значения от -9223372036854775808 до 9223372036854775807. Для работы с этими пределами PHP предоставляет константы PHP_INT_MAX, PHP_INT_MIN и PHP_INT_SIZE. Целое число записывается в десятичном, восьмеричном (с префиксом 0), шестнадцатеричном (0x) или двоичном (0b) виде.
$decimal = 42;
$octal = 077; // 63 в десятичной
$hex = 0xFF; // 255
$binary = 0b1010; // 10
При выходе за пределы допустимого диапазона целое число автоматически преобразуется в число с плавающей точкой (float).
Как преобразовать строку в целое число?
Используется явное приведение (int) или функция intval(). Приведение отбрасывает дробную часть и игнорирует нечисловые символы после цифр.
$str = '123abc';
$num = (int) $str; // 123
int(123)
Как проверить, является ли переменная целым числом?
Функция is_int() (или is_integer()) возвращает true, только если переменная имеет тип int и её значение - целое число. Для проверки строковой цифры используйте ctype_digit().
$var = 10;
if (is_int($var)) { echo 'Целое'; }
Целое
Как избежать переполнения при арифметических операциях?
Если результат операции выходит за пределы PHP_INT_MAX, PHP автоматически преобразует его в float. Для работы с большими целыми числами без потери точности используйте расширение BC Math (строковые операции).
$big = PHP_INT_MAX;
$overflow = $big + 1; // становится float
var_dump($overflow);
float(9.223372036854776E+18)
Как выполнить целочисленное деление без остатка?
Функция intdiv() возвращает целую часть от деления. Оператор % даёт остаток.
$result = intdiv(10, 3); // 3
$remainder = 10 % 3; // 1
int(3) int(1)
Как использовать целые числа в условиях и циклах?
Целое число в логическом контексте считается false только для 0, все остальные значения - true. В циклах for и foreach ключи являются целыми числами.
for ($i = 0; $i < 3; $i++) {
echo $i;
}
012
Расширенные примеры работы с целыми числами
Пример 1: Побитовые операции и сдвиги.
$a = 0b1100; // 12
$b = 0b1010; // 10
$and = $a & $b; // 8 (1000)
$or = $a | $b; // 14 (1110)
$xor = $a ^ $b; // 6 (0110)
$left = $a << 2; // 48 (110000)
$right = $a >> 2; // 3 (11)
echo "AND: $and, OR: $or, XOR: $xor, LEFT: $left, RIGHT: $right";
AND: 8, OR: 14, XOR: 6, LEFT: 48, RIGHT: 3
Пример 2: Генерация криптостойкого случайного целого числа.
$secure = random_int(1, 100);
echo $secure;
(случайное число от 1 до 100, например 42)
Пример 3: Использование strict_types для строгой типизации.
declare(strict_types=1);
function sum(int $a, int $b): int {
return $a + $b;
}
echo sum(5, 10); // 15
// sum('5', 10) вызовет TypeError
15
Пример 4: Преобразование из других систем счисления через base_convert и hexdec.
$hex = 'FF';
$dec = hexdec($hex); // 255
$bin = decbin($dec); // '11111111'
$oct = decoct($dec); // '377'
echo "Dec: $dec, Bin: $bin, Oct: $oct";
Dec: 255, Bin: 11111111, Oct: 377
Пример 5: Использование filter_var для безопасного приведения строкового целого.
$input = ' 123 ';
$filtered = filter_var($input, FILTER_VALIDATE_INT);
if ($filtered !== false) {
echo "Целое: $filtered";
} else {
echo "Не целое";
}
Целое: 123
Пример 6: Математические операции с переполнением и использование BC Math.
$a = PHP_INT_MAX;
$b = "9999999999999999999";
$sum = bcadd($a, $b); // строковое сложение
echo $sum;
19223372036854775806
Пример 7: Остаток от деления для отрицательных чисел.
$res = -10 % 3; // -1, так как знак сохраняется
$pos = abs(-10) % 3; // 1
echo "Прямой: $res, Через abs: $pos";
Прямой: -1, Через abs: 1
Пример 8: Получение целой части числа с помощью intval и приведение через (int) для разных типов.
$float = 3.99;
$int1 = intval($float); // 3
$int2 = (int) $float; // 3
$bool = true;
$int3 = intval($bool); // 1
echo "$int1 $int2 $int3";
3 3 1