ถ้าคุณต้องการทราบว่าสตริงเป็นตัวแทนที่ถูกต้องของ 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 ตรวจสอบความยาวที่เหมาะสม (อย่าเสีย CPU ก่อนทำสิ่งต่าง ๆ เช่น ctype_digit) และจัดการตัวเลขที่ไม่เหมาะสมบางอย่าง
โปรดทราบว่า filter_var ยืนยันอย่างไม่ถูกต้องว่าสตริงเป็นตัวแทนของจำนวนเต็ม PHP อย่างแท้จริง จะอนุญาตให้มีการนำหน้า + และช่องว่างโดยรอบ
ภายใน PHP ใช้ฟังก์ชั่น "_zend_handle_numeric_str" เพื่อการเปรียบเทียบที่เข้มงวด แต่มันไม่ได้เปิดเผยสิ่งนี้โดยตรงทุกที่ดังนั้นเคล็ดลับการใช้คีย์อาร์เรย์ (ซึ่งใช้ในการแปลงสตริงใด ๆ ที่เป็นตัวแทนของจำนวนเต็ม PHP เป็นจำนวนเต็ม PHP)
หากคุณต้องการแปลงที่ปลอดภัยแบบไบนารีไปและกลับจาก PHP นี่คือแนวทางที่จะทำ
ไม่ใช่ทุกคนที่อาจต้องการและอาจเป็นกรณีของการจัดการอินพุตของผู้ใช้ filter_var ไม่ได้เลวร้ายเกินไปสำหรับสิ่งนั้นและจะค่อนข้างปลอดภัยในกรณีส่วนใหญ่สำหรับผู้ที่เพิ่งเริ่มใช้ PHP
การตรวจสอบความยาว ctype_digit จากนั้นการตรวจสอบค่าที่แปลงแล้วซึ่งอยู่ในช่วงนั้นค่อนข้างแข็งสำหรับการป้อนข้อมูลของผู้ใช้ แผนการที่ซับซ้อนมากขึ้นอาจต้องการตัดหรือ regex
ปัญหาที่มีคำตอบมากมายในที่นี้คือในขณะที่คำถามนั้นคลุมเครือคำตอบก็ไม่ควร หากคุณกำลังจะเสนอวิธีแก้ปัญหาคุณควรจะสามารถอธิบายได้อย่างชัดเจนว่าอะไรจะเกิดขึ้นและไม่คาดหวัง หากปราศจากสิ่งนั้นก็ไม่มีการบอกถ้าคำตอบตรงกับคำถามหรือปลอดภัย คู่มือ PHP ไม่ได้ช่วยเสมอไปเพราะไม่ได้อธิบายคำเตือนทั้งหมดสำหรับวิธีการที่เกี่ยวข้องแต่ละรายการ สิ่งต่าง ๆ เช่น ctype_digit และ is_int มีความน่าเชื่อถือและง่ายต่อการคาดเดา แต่ข้อมูลจำเพาะของ is_numeric, filter_var และการเล่นปาหี่ (+ $ var) หรือการคัดเลือก (intval / floatval) มีการจัดทำเอกสารไม่ดี
นี่คือ PHP เหลวไหลสำหรับคุณ มันมีจำนวนสกีมาจำนวนมากสำหรับการตีความสตริงเป็นจำนวนเต็มโดยมีความไม่สอดคล้องกัน วิธีที่เข้มงวดที่สุดในการตรวจสอบความถูกต้องของสตริงจำนวนเต็มไม่ได้ถูกเปิดเผยต่อผู้ใช้โดยตรง