Jika Anda ingin benar-benar tahu apakah sebuah string adalah representasi valid dari tipe integer PHP sejati ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Namun ini tidak mungkin untuk dijalankan karena set terlalu besar (tidak akan muat dalam memori dalam kasus ini, jika Anda mengulanginya akan mengambil terlalu banyak siklus CPU).
Anda mungkin dapat melakukan pencarian biner dengan perbandingan string, namun ada cara yang lebih baik.
Yang paling sederhana:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Ada beberapa cara lain yang tidak biasa untuk mendekatinya seperti:
is_int(array_keys([$string => null])[0])
Anda juga dapat melakukan perbandingan string tetapi Anda masih harus melakukan hal-hal seperti ctype_digit, periksa panjangnya wajar (jangan buang-buang CPU sebelum melakukan hal-hal seperti ctype_digit) dan memiliki penanganan yang canggung untuk angka negatif.
Perhatikan bahwa filter_var tidak menyatakan dengan benar bahwa string benar-benar representasi dari integer PHP. Ini akan memungkinkan spasi + terkemuka dan sekitarnya.
PHP secara internal menggunakan fungsi "_zend_handle_numeric_str" untuk perbandingan yang ketat tetapi tidak secara langsung mengekspos ini di mana saja, karenanya trik menggunakan kunci array (yang menggunakannya untuk mengubah string apa pun yang merupakan representasi dari integer PHP ke integer PHP).
Jika Anda ingin konversi biner aman ke dan dari PHP, inilah pendekatan yang harus diambil.
Tidak semua orang mungkin menginginkannya dan itu mungkin merupakan kasus penanganan input pengguna. filter_var tidak terlalu buruk untuk itu dan akan cukup aman dalam banyak kasus untuk orang yang baru mengenal PHP.
Pemeriksaan panjang, ctype_digit dan kemudian cek nilai yang dikonversi dalam rentang juga cukup solid untuk input pengguna. Skema yang lebih kompleks mungkin ingin trim atau regex.
Masalah dengan banyak jawaban di sini dalam hal itu adalah bahwa sementara pertanyaannya tidak jelas, jawabannya tidak boleh. Jika Anda akan mengusulkan solusi, Anda harus dapat menjelaskan dengan tepat apa yang akan dan tidak diharapkan. Tanpa itu tidak ada yang tahu apakah jawaban cocok dengan pertanyaan atau aman. Manual PHP tidak selalu membantu karena tidak menjelaskan semua peringatan untuk masing-masing metode yang relevan yang disediakannya. Hal-hal seperti ctype_digit dan is_int sangat dapat diandalkan dan mudah untuk diprediksi tetapi spesifik is_numeric, filter_var dan juggling (+ $ var) atau casting (intval / floatval) kurang didokumentasikan.
Ini adalah PHP fudge untuk Anda. Ini memiliki sejumlah skema untuk menafsirkan string sebagai bilangan bulat, dengan inkonsistensi. Metode paling ketat untuk memvalidasi string integer tidak secara langsung terpapar kepada pengguna.