Простой ответ - у PHP нет типа bigint. Драйвер базы данных, или откуда вы получаете это значение, предоставляет вам ваши данные в виде строки, потому что это единственный надежный способ представления значения.
В 64-битной системе тип int в PHP должен быть 64-битным целым числом со знаком; но в 32-битной системе он будет 32-битным, поэтому ваши значения не будут соответствовать. Вы можете проверить дважды, повторив встроенную константу PHP_INT_MAX
, которая дает вам максимальное значение, которое вы можете хранить в целочисленном виде в вашей сборке PHP.
Чтобы определить, все ли значения состоят из цифр, вы можете использовать ctype_digit($value)
, но это не сработает для отрицательных чисел, поскольку -
не является цифрой. Лучший способ, который я знаю, это использовать регулярные выражения, например, preg_match('/^-?[0-9]+/', $value)
.
Если ваши значения соответствуют (т. Е. Находятся между PHP_INT_MIN
и PHP_INT_MAX
), вы можете просто привести строку к целому числу с (int)$value
или intval($value)
, нет необходимости в таких трюках, как +0
или *1
.
Если они этого не делают, вам нужно будет обрабатывать их как числа с плавающей точкой, что и делает PHP, если результат операции слишком велик для целого числа, но это означает, что их неточное хранение; или используйте математический модуль произвольной точности, например GMP или BCMath .