จัดรูปแบบข้อความใน PHP ด้วย sprintf

sprintf()

เป็นฟังก์ชันที่จะทำหน้าที่ส่งคืนค่า string ในรูปแบบที่ถูกกำหนดเอาไว้ออกมา... รูปแบบของ sprintf() ที่เราใช้กันมากที่สุดก็คือ

sprintf("format ที่ต้องการ", "ข้อมูลที่เราต้องการเปลี่ยน format")

โดยที่ format ที่เราต้องการจะนำหน้าด้วยเครื่องหมาย % และตามต่อด้วยตัวอักษร ซึ่งแต่ละตัวจะมีความหมายได้ดังนี้

b - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของเลขฐานสอง

c - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของตัวอักษรพร้อมค่า ASCII ของมัน

d - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของเลขฐานสิบแบบมีเครื่องหมาย

u - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของเลขฐานสิบแบบไม่มีเครื่องหมาย

f - ข้อมูลจะถูกถือเป็น float และจะถูกแสดงออกมาในรูปแบบของเลขจุดทศนิยม (floating-point number)

o - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของเลขฐานแปด

s - ข้อมูลจะถูกถือเป็น string และจะถูกแสดงออกมาในรูปแบบของ string

x - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของเลขฐานสิบหก (โดยแสดงเป็นตัวอักษรตัวเล็ก)

X - ข้อมูลจะถูกถือเป็น integer และจะถูกแสดงออกมาในรูปแบบของเลขฐานสิบหก (โดยแสดงเป็นตัวอักษรตัวใหญ่)

แต่ที่เห็นชัดๆ และใช้กันบ่อยๆ ที่สุดน่ะ คือกรณีที่เราต้องการเพิ่มเลข 0 นำหน้าให้กับข้อมูลของเรา แบบที่ผมทิ้งไว้เป็นปริศนาธรรม ว่า เรารับข้อมูลมาเป็นเลข 1 เฉยๆ แต่อยากได้ข้อมูลเป็น 01 น่ะจะทำยังไง นั่นเอง

เืมื่อเราทราบว่ามีฟังก์ชัน sprintf() แล้ว เราก็สามารถตอบคำถามปริศนาธรรมนี้ได้ ง่าย ๆ เลยโดยการทำแบบนี้ครับ

<?php
     $input = "1"; //หรือจะเป็น $input = 1 ก็ไม่มีปัญหา
     $input = sprintf("%02d", $input); //แปลง format ซะ
     echo $input;
?>

ผลลัพธ์ที่ได้ ก็จะเป็น
01
ตามที่เราต้องการเลยทีเดียวครับ...
ทีนี้หลายคนคงสงสัยว่า ทำไมต้องเป็น %02d มันมีความหมายยังไง?!? คำตอบก็คือ % และ d มันจะบอกว่า เราต้องการให้รูปแบบออกมาเป็นเลขฐานสิบ ส่วน 2 มันจะมีความหมายว่า กำหนดให้อย่างน้อยต้องเป็นเลข 2 หลัก และ 0 มีความหมายว่า ในกรณีที่เลขมันไม่ครบ 2 หลัก (คือมีหลักเดียวโดดๆ) ก็ให้เอาเลข 0 นี่แหละ ไปเติมให้หลักมันครบๆ นั่นเอง
ลองดูตัวอย่างเพิ่มเติมครับ

<?php
     $input = 1;
     $input = sprinf("%04d", $input); //งานนี้ให้มี 4 หลัก ถ้ามีไม่ถึงให้เติม 0 ให้เต็ม
     echo $input;
     echo "<br>";
     $input2 = 12345;
     $input2 = sprintf("%04d", $input2); //งานนี้ให้มี 4 หลัก ถ้ามีไม่ถึงให้เติม 0 ให้เต็ม
     echo $input2;
?>

ลองรันดู ผลลัพธ์ที่ได้จะเป็น

0001
12345

พอจะได้ไอเดียไหมครับ?!? ลองดูอีกซักตัวอย่างปะไร ก่อนจะร่ำลา

<?php
     $a = 0.02;
     $b = 0.2;
     $c = $a + $b;
     echo sprintf("%02.4f", $c);
?>

ลองทายซิว่ามันจะออกมาในรูปแบบไหน...

คำตอบก็คือ

00.2200

ครับ

เพราะ %02.4f มีความหมายว่า ในส่วนของเลขจำนวนเต็ม หากมีไม่ถึง 2 หลัก ให้เอาเลข 0 เติมให้ครบ (เราเลยได้ 00 มาไง) และส่วนของเลขทศนิยมนั้น หากมีไม่ครบ 4 หน่วย ก็ให้เอาเลข 0 ต่อให้ครบเช่นกัน (เราก็เลยได้เป็น .2200 ไง) ส่วน f คงไม่ต้องบอกแล้ว เพราะมันหมายถึงข้อมูลแบบ float นั่นเอง