Se vuoi davvero sapere se una stringa è una rappresentazione valida di un vero tipo intero PHP ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Tuttavia, questo è impossibile da eseguire poiché il set è troppo grande (in questo caso non si adatta alla memoria, se si esegue il loop invece ci vorranno troppi cicli della CPU).
Puoi forse fare una ricerca binaria con il confronto delle stringhe, tuttavia ci sono modi migliori.
L'essere più semplice:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Esistono altri modi insoliti per affrontarlo come:
is_int(array_keys([$string => null])[0])
Puoi anche fare il confronto delle stringhe ma dovrai comunque fare cose come ctype_digit, controllare che la lunghezza sia ragionevole (non sprecare la CPU prima di fare cose come ctype_digit) e avere una gestione scomoda per i numeri negativi.
Si noti che filter_var non afferma correttamente che una stringa è veramente la rappresentazione di un numero intero PHP. Permetterà uno spazio bianco iniziale + e circostante.
Internamente PHP utilizza la funzione "_zend_handle_numeric_str" per un confronto rigoroso ma non lo espone direttamente da nessuna parte, quindi il trucco utilizza i tasti dell'array (che lo usa per convertire qualsiasi stringa che sia una rappresentazione di un intero PHP in un intero PHP).
Se vuoi una conversione binaria sicura da e verso PHP, questo è l'approccio da adottare.
Non tutti potrebbero desiderarlo e potrebbe essere un caso di gestione dell'input dell'utente. filter_var non è poi così male e nella maggior parte dei casi sarà abbastanza sicuro per chi non conosce PHP.
Un controllo di lunghezza, ctype_digit e quindi un controllo del valore convertito che si trova in un intervallo è anche abbastanza solido per l'input dell'utente. Schemi più complessi potrebbero richiedere trim o regex.
Il problema con molte delle risposte qui a tale riguardo è che mentre la domanda è vaga, le risposte non dovrebbero esserlo. Se hai intenzione di proporre una soluzione, dovresti essere in grado di spiegare esattamente cosa sarà e non ti aspetti. Senza questo non si può dire se una risposta corrisponde a una domanda o è sicura. Il manuale di PHP non aiuta sempre perché non spiega tutti gli avvertimenti per ciascuno dei metodi pertinenti che fornisce. Cose come ctype_digit e is_int sono molto affidabili e facili da prevedere, ma le specifiche di is_numeric, filter_var e giocoleria (+ $ var) o casting (intval / floatval) sono scarsamente documentate.
Questo è il fondente PHP per te. Ha una miriade di schemi per interpretare le stringhe come numeri interi, con incoerenze. Il metodo più rigoroso di convalida di una stringa intera non è esposto direttamente all'utente.