Если вы хотите действительно знать, является ли строка допустимым представлением истинного целочисленного типа PHP ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Однако это невозможно запустить, так как набор слишком велик (в этом случае он не помещается в память, если вы зациклите его, это займет слишком много циклов ЦП).
Возможно, вы можете выполнить бинарный поиск со сравнением строк, однако есть лучшие способы.
Самое простое существо:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Есть несколько других необычных способов подойти к нему, таких как:
is_int(array_keys([$string => null])[0])
Вы также можете выполнять сравнение строк, но вам все равно нужно будет делать такие вещи, как ctype_digit, проверять, является ли длина разумной (не тратьте ЦП, прежде чем делать такие вещи, как ctype_digit) и иметь некоторую неудобную обработку для отрицательных чисел.
Обратите внимание, что filter_var не правильно утверждает, что строка является подлинным представлением целого числа PHP. Это позволит использовать ведущие + и окружающие пробелы.
Внутренне PHP использует функцию "_zend_handle_numeric_str" для строгого сравнения, но он нигде не раскрывает это напрямую, поэтому трюк использует ключи массива (который использует его для преобразования любой строки, представляющей целое число PHP, в PHP). целое число).
Если вы хотите, чтобы двоичное безопасное преобразование в и из PHP было таким подходом.
Не всем это может понадобиться, и это может быть случай обработки пользовательского ввода. filter_var не так уж плох для этого и в большинстве случаев будет достаточно безопасным для новичков в PHP.
Проверка длины, ctype_digit, а затем проверка преобразованного значения, которое находится в диапазоне, также достаточно надежны для ввода пользователем. Более сложные схемы могут потребовать обрезки или регулярного выражения.
Проблема с большим количеством ответов здесь в этом отношении заключается в том, что, хотя вопрос неопределенный, ответов быть не должно. Если вы собираетесь предложить решение, вы должны быть в состоянии объяснить, что именно оно будет и не ожидать. Без этого нельзя сказать, соответствует ли ответ на вопрос или является безопасным. Руководство по PHP не всегда помогает, потому что оно не объясняет все предостережения для каждого из соответствующих методов, которые оно предоставляет. Такие вещи, как ctype_digit и is_int очень надежны и их легко предопределить, но особенности is_numeric, filter_var и juggling (+ $ var) или приведение типов (intval / floatval) плохо документированы.
Это PHP выдумка для вас. У него огромное количество схем для интерпретации строк как целых чисел с несогласованностями. Самый строгий метод проверки целочисленной строки не предоставляется непосредственно пользователю.