ตัวหนังสือปนตัวเลข ก็คือแบบนี้
เป็นเงิน 10 บาท เงินสด 1,000 |
ส่วนตัวเลขปนตัวหนังสือ คืออย่างนี้
10 บาท 120 องศา |
ในกรณีเราต้องการแปลงตัวเลขเป็นตัวหนังสือให้ได้มาเฉพาะตัวเลขอย่างเดียว เราสามารถใช้ฟังก์ชั่น intval() แปลง
$string = "10 บาท"; $integer = intval( $string ); // ผลลัพธ์ที่ได้คือ 10 |
หรือใช้ Casttype ก็ได้
$string = "10 บาท"; $integer = (int)( $string ); // ผลลัพธ์ที่ได้คือ 10 |
แต่ถ้าเราต้องการจะแปลงตัวหนังสือปนตัวเลขให้ได้เฉพาะตัวเลข เราใช้สองวิธีดังกล่่าวมา ไม่ได้ เพราะมันจะคืนค่ากลับมาเป็น 0 เสมอ อย่าเชื่อผม ขอให้ทดสอบด้วยตัวเอง
สาเหตุที่เป็นเช่นนั้นเพราะ สองคำสั่งนั้นมันจะมองไล่ตัวอักษรไปทีละตัว ถ้าตัวแรกไม่ใช่ตัวเลขเสียแล้ว มัีนก็คืนค่าเป็น 0 มาทันที ไม่มองตัวต่อไปแล้ว
ทีนี้ทำไง?
หลักคิด
เราจะใช้ฟังก์ชั่น PHP ไล่หาตัวอักษรไปทีละตัว ดูว่ามันเป็นตัวเลขมั้ย ถ้าไม่ใช่ แทนที่มันด้วยตัวอักษรว่าง (มันก็เหมือนลบทิ้ง) ถ้ามันเป็นตัวเลข เก็บไว้ หาตัวต่อไป จนสุดข้อความ สิ่งที่ได้ออกมาก็จะมีเฉพาะตัวอักษรที่เป็นตัวเลข จากนั้นจึงใช้ฟังก์ชั่นแปลงสิ่งที่ได้ ให้เป็นตัวเลขที่แท้จริงอีกที
ดูคำสั่ง ผมขี้เกียจเขียนยาว จะใช้ Rexgular Expression เป็นตัวดำเนินการหลักคิดของเรา
$input = "เงินสด 1,000"; $output = ereg_replace("[^[:digit:]]","", $input ) ; |
อธิบาย
ให้แทนที่ตัวอักษรที่ไม่ใช่ตัวเลขด้วยค่าว่าง ตัวอักษรนะท่านไม่ใช่ข้อความ อ่านให้ดี
^ มีความหมายว่าไม่ใช่
[:digit:] ตัวอักษรที่เป็นตัวเลข ก็คือ 0-9
เมื่อรวมกัน ^[:digit:] มีความหมายตรงตัวว่า ตัวอักษรที่ไม่ใช่ตัวเลข
ereg_replace ค้นหาและแทนที่ (ใช้ Regular Expression) นะ
$input = "เงินสด 1,000"; $output = ereg_replace("[^[:digit:]]","", $input ) ; |
ค้นหาและแทนที่คำว่า “เงินสด 1,000” ตัวอักษรที่ไม่ใช่ตัวเลข ด้วยค่าว่าง
ถ้าอยากเขียนเป็นฟังก์ชั่นไว้ใช้งานสะดวกๆ เขียนเป็นฟังก์ชั่นก็ได้
function string_to_num( $input ) { $output = 0 ; $output = ereg_replace("[^[:digit:]]","", $input ) ; return $output + 0 ; } |
อ่านเพิ่มเติม
intval()
ereg_replace
Ton says:
18/12/2553 at 18/12/2553
ถ้าผมต้องการเก็บจุดทศนิยมล่ะครับ
เช่น 10.5
คือให้เก็บจุดด้วยจะเขียนยังไงครับ
แต่ไม่เก็บจุดที่อยู่ด้านหน้าหรือด้านหลังนะครับนะครับ
เช่น ..5.0..
ijunnn says:
26/12/2553 at 26/12/2553
ขอบคุณค่ะ :)
ijunnn.net – รวมเรื่องราวดี ๆ มีสาระบนโลกอินเตอร์เน็ต