Si vous voulez vraiment savoir si une chaîne est une représentation valide d'un vrai type entier PHP ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Cependant, cela est impossible à exécuter car l'ensemble est trop grand (ne rentrera pas en mémoire dans ce cas, si vous bouclez à la place, cela prendra trop de cycles CPU).
Vous pouvez peut-être faire une recherche binaire avec comparaison de chaînes, mais il existe de meilleures façons.
Le plus simple étant:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Il existe d'autres façons inhabituelles de l'aborder, telles que:
is_int(array_keys([$string => null])[0])
Vous pouvez également faire des comparaisons de chaînes, mais vous devrez toujours faire des choses telles que ctype_digit, vérifier que la longueur est raisonnable (ne gaspillez pas le processeur avant de faire des choses comme ctype_digit) et avoir une gestion délicate pour les nombres négatifs.
Notez que filter_var n'affirme pas correctement qu'une chaîne est véritablement la représentation d'un entier PHP. Cela permettra un + au début et un espace blanc environnant.
En interne, PHP utilise la fonction "_zend_handle_numeric_str" pour une comparaison stricte mais elle ne l'expose pas directement n'importe où, d'où l'astuce en utilisant les clés de tableau (qui l'utilise pour convertir toute chaîne qui est une représentation d'un entier PHP en entier PHP).
Si vous voulez une conversion binaire sûre vers et depuis PHP, c'est l'approche à adopter.
Tout le monde ne voudra peut-être pas cela et cela pourrait être un cas de gestion des entrées utilisateur. filter_var n'est pas trop mal pour cela et sera assez sûr dans la plupart des cas pour les nouveaux utilisateurs de PHP.
Une vérification de longueur, ctype_digit, puis une vérification de la valeur convertie indiquant qu'elle est dans une plage est également assez solide pour la saisie de l'utilisateur. Des schémas plus complexes peuvent souhaiter un ajustement ou une expression régulière.
Le problème avec beaucoup de réponses ici à cet égard est que, même si la question est vague, les réponses ne devraient pas l'être. Si vous proposez une solution, vous devriez être en mesure d'expliquer exactement ce à quoi elle s'attendra et ce qu'elle n'attendra pas. Sans cela, il est impossible de dire si une réponse correspond à une question ou est sûre. Le manuel PHP n'aide pas toujours car il n'explique pas toutes les mises en garde pour chacune des méthodes pertinentes qu'il fournit. Des choses comme ctype_digit et is_int sont très fiables et faciles à préditer mais les spécificités de is_numeric, filter_var et jonglage (+ $ var) ou casting (intval / floatval) sont mal documentées.
C'est du fudge PHP pour vous. Il a une myriade de schémas pour interpréter les chaînes comme des entiers, avec des incohérences. La méthode la plus stricte de validation d'une chaîne entière n'est pas directement exposée à l'utilisateur.