文字列が真のPHP整数型の有効な表現であるかどうかを本当に知りたい場合...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
ただし、セットが大きすぎるため、これを実行することは不可能です(この場合、メモリに収まりません。代わりにループすると、CPUサイクルが多すぎます)。
おそらく、文字列比較でバイナリ検索を実行できますが、もっと良い方法があります。
最も単純な存在:
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などを実行する前にCPUを無駄にしないでください)、負の数を扱いにくくします。
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のファッジです。文字列を整数として解釈するための無数のスキーマがあり、矛盾があります。整数文字列を検証する最も厳密な方法は、ユーザーに直接公開されません。