1) Я хочу понять, почему числовые данные хранятся как bigint
рассматривается как 'string'
когда я звоню gettype();
в php.
2) Есть ли такая функция, как is_bigint();
для PHP, который может проверить, является ли переменная bigint.
3) Как я могу проверить тип данных, когда его bigint умножается на 1 ИЛИ добавляя 0 к строке, смешанной с числами и алфавитами, будет повторен 'Notice: A non well formed numeric value encountered in line 2'
и звонит gettype();
на теперь умноженный тип данных вернет:integer
Ответ прост: у 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.
Других решений пока нет …