String formatting

7 January 2017

ในภาษา PHP มีฟังก์ชันในการจัดรูปแบบของ String ที่เรียกว่า Format string คือฟังก์ชัน sprintf() ซึ่งเป็นฟังก์ชันสำหรับจัดรูปแบบของ String หรือตัวเลขเพื่อให้แสดงผลได้ในรูปแบบต่างๆ ที่กำหนดโดย Type specifiers เป็นรูปแบบของการแสดงผลของฟังก์ชัน

string sprintf ( string $format [, mixed $args [, mixed $... ]] )

พารามิเตอร์ตัวแรกเป็นรูปแบบของ String ที่กำหนดโดย Type specifiers พารามิเตอร์ตัวที่สองเป็นต้นไปเป็นรายการของตัวแปรที่สอดคล้องกับ Type specifiers ที่ได้กำหนดในรูปแบบของ String และฟังก์ชันนี้จะส่งค่ากลับเป็น String

นี่เป็นรายการของ Type specifiers ที่ใช้กำหนดสำหรับพารามิเตอร์ตัวแรกของฟังก์ชัน sprintf()

  • %% - แสดงตัวอักษรเปอร์เซนต์ ไม่มีอากิวเมนต์
  • %b - อากิวเมนต์แบบ Integer และแสดงผลในเลขฐานสอง
  • %c - อากิวเมนต์แบบ Integer และแสดงค่ารหัส ASCII เป็น Integer
  • %d - อากิวเมนต์แบบ Integer แสดงผลลัพธ์แบบ Integer ที่มีเครื่องหมาย
  • %e - อากิวเมนต์แบบ Float แสดงผลลัพธ์แบบสัญกรณ์วิทยาศาสตร์
  • %E - อากิวเมนต์แบบ Float แสดงผลลัพธ์แบบสัญกรณ์วิทยาศาสตร์
  • %f - อากิวเมนต์แบบ Float แสดงผลลัพธ์แบบ Float (locale aware)
  • %F - อากิวเมนต์แบบ Float แสดงผลลัพธ์แบบ Float (non-locale aware)
  • %g - รูปแบบสั้นของ %e และ %f
  • %G - รูปแบบสั้นของ %E และ %F
  • %o - อากิวเมนต์แบบ Integer และแสดงผลในเลขฐานแปด
  • %s - อากิวเมนต์แบบ String แสดงผลลัพธ์แบบ String
  • %u - อากิวเมนต์แบบ Integer แสดงผลลัพธ์แบบ Integer ที่ไม่มีเครื่องหมาย
  • %x - อากิวเมนต์แบบ Integer และแสดงผลในเลขฐานสิบหก (ตัวพิมพ์เล็ก)
  • %X - อากิวเมนต์แบบ Integer และแสดงผลในเลขฐานสิบหก (ตัวพิมพ์ใหญ่)

การแสดงผลด้วยฟังก์ชัน sprintf()

ต่อไปมาดูตัวอย่างการใช้งานของฟังก์ชัน sprintf() สำหรับการจัดรูปแบบ String และตัวเลขในแบบต่างๆ เราจะเริ่มจากการแสดงผลข้อความและตัวเลข

<?php

$name = "Mateo";
$score = 38;

echo sprintf("%s love playing game.\n", $name);
echo sprintf("%s play a game and his score is %d.\n", $name, $score);

?>

ในตัวอย่าง เป็นการแสดงผลข้อความและตัวเลขด้วยฟังก์ชัน sprintf() พารามิเตอร์ตัวแรกของเป็นรูปแบบของ String ซึ่งเราได้กำหนด Type specifier ที่ต้องการภายใน String นี้ และพารามิเตอร์ตัวที่สองเป็นต้นไป เป็นค่าของ Type specifier ที่เราได้กำหนดในพารามิเตอร์แรกของฟังก์ชัน

sprintf("%s love playing game.\n", $name);

ในคำสั่งนี้ เป็นการแสดงผลข้อความโดยค่าในตัวแปร $name จะถูกนำไปแทนที่ใน %s

sprintf("%s play a game and his score is %d.\n", $name, $score)

ในคำสั่งนี้เรามี Type specifier สองตัวคือ %s และ %d ดังนั้นเราจึงส่งอากิวเมนต์เป็น $name และ $score ซึ่งเป็นข้อมูลที่แสดงใน Type specifier ตามลำดับ

Mateo love playing game.
Mateo play a game and his score is 38.

นี่เป็นผลลัพธ์การทำงานของโปรแกรม Type specifier ทั้งหมดถูกแทนที่ด้วยค่าของตัวแปรแทน

การแสดงตัวเลขด้วยฟังก์ชัน sprintf()

ในภาษา PHP คุณยังสามารถใช้ฟังก์ชัน sprintf() เพื่อแสดงผลตัวเลขในรูปแบบต่างๆ เช่น ในฐานอื่นหรือข้อมูลประเภทอื่น มาดูตัวอย่างการใช้งาน

<?php

$number = 28;

echo sprintf("Type\tValue\n");
echo sprintf("%%d\t%d\n", $number);
echo sprintf("%%b\t%b\n", $number);
echo sprintf("%%e\t%e\n", $number);
echo sprintf("%%E\t%E\n", $number);
echo sprintf("%%f\t%f\n", $number);
echo sprintf("%%F\t%F\n", $number);
echo sprintf("%%o\t%o\n", $number);
echo sprintf("%%u\t%u\n", $number);
echo sprintf("%%x\t%x\n", $number);
echo sprintf("%%X\t%X\n", $number);

?>

ในตัวอย่าง เป็นการแสดงค่าของ 28 ซึ่งเป็นค่าในฐานสิบในรูปแบบต่างๆ ซึ่ง Type specifier แต่ละประเภทนั้นมีการแสดงผลที่แตกต่างกันออกไปถึงแม้ว่าจะเป็นค่าเดียวกันก็ตาม

Type    Value
%d      28
%b      11100
%e      2.800000e+1
%E      2.800000E+1
%f      28.000000
%F      28.000000
%o      34
%u      28
%x      1c
%X      1C

นี่เป็นผลลัพธ์การทำงานของโปรแกรม คุณจะเห็นว่าการแสดงผลของเลข 28 นั้นแตกต่างกัน แต่ค่าเหล่านี้เป็นค่าเดียวกัน เช่นเมื่อคุณเปรียบเทียบ 28 == 11100b จะได้ผลลัพธ์เป็นจริง เพราะว่า 11100b นั้นคือ 28 ในฐานสอง

ต่อไปเป็นตัวอย่างในการใช้งานของฟังก์ชันในการจัดรูปแบบกับการแสดงผลตัวเลขทศนิยมและตัวเลขจำนวนเต็ม

<?php

$number = 28.848315;

echo sprintf("%f\n", $number);
echo sprintf("%.2f\n", $number);
echo sprintf("%.4f\n", $number);

$number2 = 28;

echo sprintf("%5d\n", $number2);
echo sprintf("%'.5d\n", $number2);
echo sprintf("%'05d\n", $number2);

?>

คุณสามารถกำหนดการแสดงจำนวนหลักของจุดทศนิยมได้โดยการกำหนด Type specifier เช่น %.nf โดยที่ n เป็นจำนวนหลักของทศนิยมที่คุณต้องการแสดง

สำหรับในตัวแปร $number2 นั้นเป็นการใส่ข้อความในรูปแบบ Pad left โดยการกำหนด Type specifier ในรูปแบบ %nd หรือ %'mnd เมื่อ n เป็นจำนวนตัวอักษรทั้งหมด และ m เป็นตัวอักษรที่ต้องการเติมใส่ทางด้านซ้าย

28.848315
28.85
28.8483
   28
...28
00028

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

การจัดรูปแบบของข้อความ String

ต่อไปเป็นตัวอย่างในการจัดรูปแบบของ String โดยการเพิ่มข้อความหรือที่เรียกกว่า Padding Strings ในภาษา PHP

<?php

$lang = "PHP";
$site = "marcuscode.com";

echo sprintf("[%s]\n", $lang);
echo sprintf("[%10s]\n", $lang);
echo sprintf("[%-10s]\n", $lang);
echo sprintf("[%010s]\n", $lang);
echo sprintf("[%'#10s]\n", $lang);
echo sprintf("[%10.10s]\n", $site);

?>

ในตัวอย่าง เป็นการแสดงผลของ String "PHP" ในรูปแบบต่างๆ โดยการจัดรูปแบบ String

echo sprintf("[%10s]\n", $lang);
echo sprintf("[%-10s]\n", $lang);

เราเพิ่มจำนวนเต็มบวกสำหรับเติม String ในทางซ้าย และจำนวนเต็มลบสำหรับเต็ม String ในทางขวาในตัวอย่าง %10s เป็นการแสดง String ทั้งหมดที่มีขนาด 10 โดยเติมช่องว่างจากทางด้านซ้าย (Left padding) และ -10 สำหรับเติมช่องว่างจากทางด้านขวา (Right padding)

echo sprintf("[%010s]\n", $lang);
echo sprintf("[%'#10s]\n", $lang);

คุณสามารถใช้ตัวเลข ตัวอักษร หรือสัญลักษณ์อื่นๆ ได้ ดังในตัวอย่าง คำสั่งแรกเป็นการเพิ่ม 0 ทางซ้ายของ String ให้มีขนาดเป็น 10 คำสั่งที่สองเป็นการเพิ่มเครื่องหมาย # โดยเครื่องหมายจะต้องขึ้นต้นด้วย ' เสมอ

echo sprintf("[%10.10s]\n", $site);

ในคำสั่งนี้ เป็นการแสดงข้อความที่มีขนาด 10 โดยตัดเอาเพียงแค่ 10 ตัวอักษรจาก String "marcuscode.com"

[PHP]
[       PHP]
[PHP       ]
[0000000PHP]
[#######PHP]
[marcuscode]

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

การใช้ฟังก์ชัน number_format()

ในภาษา PHP คุณสามารถใช้ฟังก์ชัน number_format() สำหรับจัดรูปแบบของตัวเลข เช่น การแสดงผลในรูปแบบของเงินหรือจำนวนที่มีเครื่องหมาย , แบ่งในหลักพัน มาดูตัวอย่างการใช้งานของฟังก์ชัน

<?php

$number = 1272.831931;
echo $number . "\n";
echo number_format($number) . "\n";
echo number_format($number, 2) . "\n";

$money = 36471.90;
echo number_format($money, 2, ".", ",") . "\n"; // US format
echo number_format($money, 2, ",", ".") . "\n"; // English format
echo number_format($money, 2, "/", "-") . "\n"; // Custom format

?>

ในตัวอย่าง เป็นการแสดงตัวเลขโดยการจัดรูปแบบในแบบต่างๆ ซึ่งฟังก์ชันนี้สามารถใส่ได้ตั้งแต่หนึ่ง สอง และสี่พารามิเตอร์

echo number_format($number) . "\n";
echo number_format($number, 2) . "\n";

หากคุณใส่เพียงพารามิเตอร์แรก จะเป็นการแสดงตัวเลข Integer และมีเครื่องหมายคอมมา , เป็นตัวแบ่งในหลักพัน และพารามิเตอร์ที่สองเป็นการกำหนดจำนวนทศนิยมหลังจุด . ฟังก์ชันนี้มีการปัดตัวสำหรับทศนิยมที่มากกว่า 5 และปัดทิ้งตัวเลขหลังจุดท้งถ้าหากน้อยกว่า 5

$money = 36471.90;
echo number_format($money, 2, ".", ",") . "\n"; // US format
echo number_format($money, 2, ",", ".") . "\n"; // English format
echo number_format($money, 2, "/", "-") . "\n"; // Custom format

และหากคุณใส่ทั้งพารามิเตอร์ทั้งหมด ในพารามิเตอร์ที่สามจะเป็นการกำหนดตัวคั่นระหว่างจำนวนเต็มและทศนิยม และพารามิเตอร์ที่สี่เป็นตัวแบ่งในหลักพัน

1272.831931
1,273
1,272.83
36,471.90
36.471,90
36-471/90

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราได้แสดงตัวเลขในจำนวนทศนิยมที่ต่างกัน และทำการเปลี่ยนตัวคั่นของทศนิยม และหลักพันในรูปแบบของอเมริกาและอังกฤษ และแบบกำหนดเอง

ในบทนี้คุณได้เรียนรู้เกี่ยวกับฟังก์ชัน sprintf() และฟังก์ชัน number_format() ซึ่งเป็นฟังก์ชันสำหรับจัดรูปแบบของ String และตัวเลขในภาษา PHP

บทความนี้เป็นประโยชน์หรือไม่?Yes·No