Если вы хотите действительно знать, является ли строка правильным представлением истинного целочисленного типа 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 использует функцию "_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 выдумка для вас. У него есть бесчисленное множество схем для интерпретации строк как целых чисел с несоответствиями. Самый строгий метод проверки целочисленной строки не предоставляется непосредственно пользователю.