Якщо ви хочете по-справжньому знати, чи рядок є дійсним поданням справжнього цілого типу 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 та жонглювання (+ $ var) чи кастинг (intval / floatval) погано зафіксована.
Це грі PHP для вас. Він має безліч схем для інтерпретації рядків як цілих чисел з невідповідностями. Найсуворіший метод перевірки цілого рядка користувачеві не піддається безпосередньому впливу.