410 likes | 523 Views
บทที่ 12 [String]. PHP: Hypertext Preprocessor. สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร. วัตถุประสงค์การเรียนรู้ประจำบท.
E N D
บทที่ 12 [String] PHP:Hypertext Preprocessor สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร
วัตถุประสงค์การเรียนรู้ประจำบทวัตถุประสงค์การเรียนรู้ประจำบท • ในบทนี้จะกล่าวถึงชนิดข้อมูลพื้นฐานที่สำคัญที่สุดอีกชนิดหนึ่ง นั่นก็คือสตริง จะได้เรียนรู้วิธีการเขียนค่าสตริง (String Literal) รูปแบบต่างๆ การทำงานกับตัวอักษรในสตริง และการแปลงข้อมูลชนิดอื่นๆ มาเป็นชนิดสตริง
กิจกรรมการเรียนการสอนกิจกรรมการเรียนการสอน • บรรยายโดยผู้สอนและใช้เอกสารประกอบการสอนของผู้สอน • สอนโดยใช้สื่อคอมพิวเตอร์ผ่านเครื่องฉาย • อภิปรายในชั้นเรียนร่วมกัน • ให้นิสิตค้นคว้าเพิ่มเติมจากตำราและเอกสารที่เกี่ยวข้อง • ทำแบบฝึกหัดท้ายบท
การประเมินผล • ประเมินผลจากการตอบคำถามและอภิปรายในชั้นเรียน • ทำแบบฝึกหัดท้ายบท • ทำรายงานส่ง
สตริงในภาษา PHP สตริง (String)คือกลุ่มของอักขระ (Character) ซึ่งอาจเป็นตัวอักษร ตัวเลข เครื่องหมายเว้นวรรคตอน หรือแม้แต่สัญลักษณ์พิเศษต่างๆ PHP กำหนดให้อักขระแต่ละตัวในสตริงมีขนาด 1 ไบต์หรือ 8 บิต ดังนั้น จึงมีอักขระที่แตกต่างกันทั้งสิน 256 ตัว ซึ่งถ้ามองเป็นค่าจำนวนเต็ม หรือที่เรียกว่ารหัสแอสกี้ (ASCII Code)ก็จะมีตั้งแต่ 0 ไปจนถึง 255 โดยอักขระที่มีค่า 0 ถึง 31 จะทำหน้าที่เป็นอักขระควบคุม (Contril Characters)เช่น การขึ้นบรรทัดใหม่ และการเว้นระยะแท็บ เป็นต้น อักขระที่มีค่า 32 ถึง 127 คือกลุ่มของตัวอักษร เครื่องหมายวรรคตอน และสัญลักษณ์ ต่างๆ ในภาษาอังกฤษ ส่วนอักขระที่มีค่า 128 ถึง 255 จะแตกต่างกันไปแล้วแต่ชุดอักขระ (Character Set) ถ้าเป็นชุดอักขระที่มีภาษาไทย ส่วนนี้ก็จะเป็นตัวอักษรในภาษาไทย
การเขียนค่าสตริง • สตริงแบบ single quote เป็นรูปแบบที่ง่ายที่สุด โดยใช้คำพูดขีดเดียว ( ‘ ) ครอบไว้ เช่น ถ้าต้องการให้เครื่องหมาย ‘ เป็นส่วนหนึ่งของค่าสตริง ให้ใช้เครื่องหมาย backslash กำกับไว้ข้างหน้า ส่วนอักขระอื่นๆ ให้ใส่ลงไปโดยตรงได้เลย ซึ่งรวมถึงเครื่องหมายคำพูดสองขีด ( “ ) ด้วย การใส่ backslash ข้างหน้าอักขระอื่นๆ จะทำให้เครื่องหมาย backslash นั้นกลายเป็นส่วนหนึ่งของค่าสตริงด้วย แทนที่จะถูกตีความเป็นความหมายพิเศษ จะแสดงข้อความว่า Arnold once said: “ I’ll be back” echo ‘this is a simple string’; echo ‘Arnold once said: “I\ ‘ ll be back”’;
การเขียนค่าสตริง • สตริงแบบ double quote
การเขียนค่าสตริง • สตริงแบบheredoc สตริงแบบheredoc จะเริ่มต้นด้วย <<< ตามด้วย identifier ซึ่งเป็นคำอะไรก็ได้ จากนั้นขึ้นบรรทัดใหม่ และระบุสตริงที่ต้องการลงไปโดยสามารถขึ้นบรรทัดใหม่ภายในค่าสตริงได้ด้วย เสร็จแล้วให้ขึ้นบรรทัดใหม่แล้วปิดท้ายด้วย identifier คำเดิม <<< identifier สตริง indentifier
สตริงแบบheredoc <? //กำหนดค่าสตริงเป็นข้อมูล HTML เก็บไว้ในตัวแปร $str $str=<<<HTMLBLOCK <head><title>Nooknet's Books</title></head> <body bgcolor="#fffed9"> <h1>หนังสือของนุกเน็ต</h1> <ul> <li>สีแสนสนุก</li> <li>สี่เหลี่ยมหรรษา</li> <li>Pooh and Friends</li> <li>Dora's Rainbow Surprise</li> </ul> </body> </html> HTMLBLOCK; echo $str; //แสดงค่าสตริงในตัวแปร $strออกมา ?>
การทำงานกับตัวอักษรในสตริงการทำงานกับตัวอักษรในสตริง สามารถเข้าถึงเพื่ออ่านและแก้ไขตัวอักษรแต่ละตัวในสตริงได้ ซึ่งมีรูปแบบเหมือนกับการเข้าถึงสมาชิกในอาร์เรย์ นั่นคือให้พิมพ์วงเล็บก้ามปู [ ] ต่อท้ายชื่อตัวแปรสตริงแล้วระบุหมายเลข (Offset) ของตัวอักษรที่ต้องการลงไปในวงเล็บ โดยตัวอักษรตัวแรกทางซ้ายจะมีหมายเลขเป็น 0 สำหรับตัวถัดมาก็จะเป็น 1, 2 , 3, ... ไปเรื่อยๆ ตามลำดับ เช่นถ้ากำหนดค่าสตริงดังนี้ $str = “Hello World\nFrom\tPHP”;
การทำงานกับตัวอักษรในสตริงการทำงานกับตัวอักษรในสตริง <? $str = "Hello World\nFrom\tPHP"; //กำหนดค่าสตริงให้กับตัวแปร $str echo "$str<br><hr>\n"; // แสดงค่าสตริงในตัวแปร $strออกมา //อ่านตัวอักษรบางตัวของสตริงมาแสดง echo "หมายเลข 0 คือตัว " . $str[0] . "<br>\n"; echo "หมายเลข 5 คือตัว " . $str[5] . "<br>\n"; echo "หมายเลข 10 คือตัว " . $str[10] . "<br>\n"; //แก้ไขตัวอักษร 3 ตัวท้ายของสตริง $str[17] = "ก"; $str[18] = "ข"; $str[19] = "ค"; echo "$str<br><hr>\n"; // แสดงค่าสตริงในตัวแปร $strออกมาอีกครั้ง //วนลูป เพื่อแสดงตัวอักษรทั้งหมดในสตริงออกมาทีละตัว พร้อมทั้งรหัสแอสกี้ของมัน for($i = 0;$i<strlen($str);$i++){ echo "หมายเลข {$i}: " . $str[$i] . ",รหัสแอสกี้ = " . ord($str[$i]) ." <br>\n"; } ?>
การแปลงชนิดข้อมูลอื่นๆ เป็นชนิดสตริง การแปลงค่าชนิดต่างๆ เป็นชนิดสตริง มีเงื่อนไขดังนี้ • ค่าตรรกะ TRUE จะถูกแปลงเป็น “1” และค่าตรรกะ FALSE จะถูกแปลงเป็น “” (สตริงว่าง) • ค่าชนิด integer หรือ float จะถูกแปลงเป็นสตริงตัวเลขซึ่งแสดงถึงค่านั้นๆ เช่น ค่า จำนวนเต็ม 123 จะถูกแปลงเป็น “123” และค่าจำนวนทศนิยม 123e-2 จะถูกแปลงเป็น “1.23” • อาร์เรย์จะถูกแปลงเป็นสตริง “Array” เสมอ ไม่ว่าจะมีข้อมูลอะไรอยู่ในอาร์เรย์หรือไม่มีข้อมูลเลย (ถ้าอาร์เรย์ว่าง) ก็ตาม ดังนั้นไม่สามารถเขียนโค้ดง่ายๆ ว่า echo $arr; เพื่อแสดง ข้อมูลทั้งหมดในอาร์เรย์ $arrออกมาได้ • ออบเจ็คจะถูกแปลงเป็นค่าสตริงที่มีรูปแบบ “Object id #n” โดย n คือหมายเลขออบเจ็คที่ PHP กำหนดให้ในช่วงรันโปรแกรม ซึ่งแต่ละออบเจ็คจะมีหมายเลขไม่ซ้ำกัน • ค่าแบบ Resource จะถูกแปลงเป็นสตริงที่มีรูปแบบ “Resource id #n” โดย n คือหมายเลข Resource ที่ PHP กำหนดให้ในช่วงรันโปรแกรม ซึ่งแต่ละ Resource จะมีหมายเลขไม่ซ้ำกัน • ค่า NULL จะถูกแปลงเป็น “” (สตริงว่าง)
การแปลงชนิดข้อมูลอื่นๆ เป็นชนิดสตริง <? $b = TRUE; // เก็บค่าตรรกะ TRUE ไว้ในตัวแปร $b $i = 123; // เก็บค่าจำนวนเต็ม 123 ไว้ในตัวแปร $i $f = 123e-2; // เก็บค่าจำนวนทศนิยม 123 x 10-2 ไว้ในตัวแปร $f $arr = array('สวัสดี','ประเทศไทย'); // เก็บอาร์เรย์ไว้ในตัวแปร $arr $res = fopen('c:/boot.ini','r'); // เก็บค่า Resource ไว้ในตัวแปร $res $obj = new DOMDocument('1.0','tis-620'); // เก็บออบเจ็คไว้ในตัวแปร $obj /*ใช้คำสั่ง echo แสดงค่าของตัวแปรต่างๆ ออกมา ซึ่งค่าทั้งหมดจะถูกแปลงไปเป็นชนิดสตริงก่อนโดยอัตโนมัติ*/ echo $b . "<br>"; echo $i . "<br>"; echo $f . "<br>"; echo $arr . "<br>"; echo $res . "<br>"; echo $obj . "<br>"; ?>
การลบ Whitespace ออกจากหัว/ท้ายของสตริง ได้แก่ฟังก์ชั่น trim, Itrim, rtrim และchop ฟังก์ชั่น trimใช้ลบ Whitespace ออกจากหัวและท้ายของสตริง str ซึ่ง Whitespace จะหมายถึง อักขระต่างๆ ต่อไปนี้ • ช่องว่าง ( “ ” ) คืออักขระที่มีรหัสแอสกี้ 32 ( 20ฐานสิบหก ) • ขึ้นบรรทัดใหม่ (“\n”) คืออักขระที่มีรหัสแอสกี้ 10 ( 0A ฐานสิบหก) • Carriage Return (“\r”) คืออักขระที่มีรหัสแอสกี้ 13 (0D ฐานสิบหก) • แท็บแนวนอน (‘\t”) คืออักขระที่มีรหัสแอสกี้ 9 • แท็บแนวตั้ง (“\x0B”)คืออักขระที่มีรหัสแอสกี้ 11 (0B ฐานสิบหก) • NUL-byte (“\0”) คืออักขระที่มีรหัสแอสกี้ 0 (NUL-byte นี้ไม่ใช่ค่า NULL ที่หมายถึงค่าว่าง) string trim (string str[, string charlist]) string ltrim (string str[, string charlist]) string rtrim (string str[, string charlist])
การลบ Whitespace ออกจากหัว/ท้ายของสตริง <? $text = "\t\n สวัสดีครับ..."; //ลบ Whitespace echo "บรรทัด 1: " . trim($text) . "<br>\n"; //ลบช่องว่าง แท็บ และ จุด echo "บรรทัด 2: " . trim($text, "\t.") . "<br>\n"; //ลบอักขระควบคุม (อักขระที่มีรหัสแอสกี้ 0 ถึง 31) echo "บรรทัด 3: " . trim($text,"x00\x1F") . "<br>\n"; ?>
การแปลง Case ของตัวอักษรในสตริง ได้แก่ฟังก์ชั่น strtoupper, strtolower, ucfirst และ ucwords โดยทั้งสี่ฟังก์ชั่นจะรับสตริงเข้ามาเป็นอาร์กิวเมนต์ แล้วให้ผลลัพธ์เป็นสตริงใหม่ที่เกิดจากการนำตัวอักษรบางตัวหรือทั้งหมดในสตริงนั้นมาแปลง Case ดังรายละเอียดในตาราง
การแปลง Case ของตัวอักษรในสตริง <? $text = "How are you?"; echo "บรรทัด 1: " . strtoupper($text) . "<br>\n"; echo "บรรทัด 2: " . strtolower($text) . "<br>\n"; echo "บรรทัด 3: " . ucfirst($text) . "<br>\n"; echo "บรรทัด 4: " . ucwords($text) . "<br>\n"; ?>
การทำงานกับสตริงย่อย • ฟังก์ชั่น substr string substr (string str,int start[,int length]) <? echo "บรรทัด 1 : " . substr("กขคงจ", 1 ) . "<br>"; echo "บรรทัด 2 : " . substr("กขคงจ", 1,3 ) . "<br>"; echo "บรรทัด 3 : " . substr("กขคงจ", 0,4) . "<br>"; echo "บรรทัด 4 : " . substr("กขคงจ", 0,8) . "<br>"; echo "บรรทัด 5 : " . substr("กขคงจ", -2,1 ) . "<br><hr>"; $str="nooknet"; for($i=1;$i<=strlen($str);$i++){ echo substr($str,0,$i)."<br>"; } ?>
การทำงานกับสตริงย่อย • ฟังก์ชั่นstrpos, strrpos, stripos และstrripos intstrpos (string str, mixed search[,int offset]) intstrrpos (string str, mixed search[,int offset]) intstripos (string str, mixed search[,int offset]) intstrripos (string str, mixed search[,int offset])
ฟังก์ชั่น strops, strrpos, striposและ strripos(ต่อ) <? $str= "nooknet ok"; echo "สตริงที่ถูกค้นหาคือ \"$str"<hr>"; echo "<b>ค้นหาโดยใช้ strpos</b><br>"; $pos1 = strpos($str,"ok"); $pos2 = strpos($str, "ok"); show_result(); echo "<b>ค้นหาโดยใช้ strrpos</b><br>"; $pos1 = strrpos($str,"ok"); $pos2 = strrpos($str, "ok"); show_result(); echo "<b>ค้นหาโดยใช้ stripos</b><br>"; $pos1 = stripos($str,"ok"); $pos2 = stripos($str, "ok"); show_result(); echo "<b>ค้นหาโดยใช้ strripos</b><br>"; $pos1 = strripos($str,"ok"); $pos2 = strripos($str, "ok"); show_result(); function show_result(){ global $post1,$pos2; echo 'ผลการค้นหาสตริง "ok": '; echo ($pos1 === FALSE ? "ไม่พบ" : "พบที่ตำแหน่ง $pos1") . "<br>"; echo 'ผลการค้นหาสตริง "ok": '; echo ($pos2 === FALSE ? "ไม่พบ" : "พบที่ตำแหน่ง $pos2") . "<hr>"; } ?>
การทำงานกับสตริงย่อย • ฟังก์ชั่นstrstr, stristr, strchr และstrrchr string strstr (string str,string search) string stristr (string str,string search) string strchr (string str,string search) string strrchr (string str,string search) <? $str= "nooknet ok"; echo "บรรทัด 1 :" . strstr($str,"ok") . "<br>"; echo "บรรทัด 2 :" . strstr($str,"ok") . "<br>"; echo "บรรทัด 3 :" . stristr($str,"ok") . "<br>"; //ในที่นี้ฟังก์ชั่น จะใช้ตัวอักษร e เพียงตัวเดียวในการค้นหา echo "บรรทัด 4 :" . strrchr($str,"eieio") . "<br>"; ?>
การทำงานกับสตริงย่อย • ฟังก์ชั่นsubstr_replace mixed substr_replace(mixed str,stringreplace,int start[,int length]) <? $str="สวัสดีครับนุกเน็ต"; echo "บรรทัด 1 :" . substr_replace($str, "Hi,Nooknet",0) . "<br>"; echo "บรรทัด 2 :" . substr_replace($str, "ค่ะ",6,4) . "<br>"; echo "บรรทัด 3 :" . substr_replace($str, "ชัยวัฒน์",10) . "<br>"; echo "บรรทัด 4 :" . substr_replace($str, "ชัยวัฒน์",-7) . "<br>"; echo "บรรทัด 5 :" . substr_replace($str, "",10,0) . "<br>"; ?>
การทำงานกับสตริงย่อย • ฟังก์ชั่นstr_replace และ str_ireplace mixed str_replace(mixed search, mixed replace, mixed str [,int &count]) mixed str_ireplace(mixed search, mixed replace, mixed str [,int &count]) <? $error_string = "หมึกหกรดมุ่ง มุ่งเลอะหมึกหมด"; $correct_string = str_replace("มุ่ง" , "มุ้ง" , $error_string, $count); echo "บรรทัด1 : $correct_string(มีการแทนที่ $count ครั้ง)<br>"; $message = "มาโหวตให้ v3 และ v4 กันเถอะ"; $af4_code = array("v1","v2","v3","v4","v5"); $af4_nickname = array("นัท","แจ็ค","พะแพง","แอ้","บอมบ์"); echo "บรรทัด2 : $new_message(มีการแทนที่ $count ครั้ง)<br>"; //แทนที่สระในภาษาอังกฤษด้วยสตริงว่าง (ลบสระทิ้งนั่นไปเอง) $text = "Hello World of PHP"; $vowels = array("a","e","i","o","u","A","E","I","O","U"); $new_text = str_replace($vowels,"",$text,$count); echo "บรรทัด3 : $new_text(มีการแทนที่ $count ครั้ง)<br>"; ?>
การเปรียบเทียบสตริง หลักการเปรียบเทียบสตริง คือ ตัวอักษรในตำแหน่งที่ตรงกันของสตริงทั้งสองชุดจะถูกนำมาเปรียบเทียบกันทีละคู่ เริ่มจากตัวซ้ายมือสุดก่อน ถ้าตัวอักษรใดมีค่าแอสกี้น้อยกว่าจะได้ว่าสตริงนั้นน้อยกว่าอีกสตริงหนึ่งทันที่ แต่ถ้าหากเท่ากันจะเปรียบเทียบตัวอักษรที่สองนับจากซ้ายมือต่อไป และถ้ายังเท่ากันอีกก็จะใช้ตัวอักษรที่อยู่ถัดไปทางขวาเรื่อยๆ ถ้าหากเปรียบเทียบตัวอักษรสตริงทั้งสองชุดไปเรื่อยๆ แล้วยังไม่พบความแตกต่าง แต่ปรากฏว่าสตริงหนึ่งสิ้นสุดแล้ว ในขณะที่อีกสตริงยังมีตัวอักษรอื่นตามมาอีก (พูดง่ายๆ คือสตริงชุดหนึ่งเป็นสตริงย่อยของสตริงอีกชุดหนึ่ง) กรณีอย่างนี้สตริงที่ยาวกว่าจะมีค่ามากกว่า
การเปรียบเทียบสตริง ใช้เปรียบเทียบสตริง 2 ชุด โดยฟังก์ชั่น strcmp จะสนใจความแตกต่างระหว่างตัวอักษรเล็กกับใหญ่ ในขณะที่ strcasecmp จะไม่สนใจ (ignore case) ผลลัพธ์ของฟังก์ชั่นทั้งสองมีความหมายดังนี้ intstrcmp(string str1,string str2) intstrcasecmp (string str1,string str2)
การเปรียบเทียบสตริง <? //กำหนดตัวแปรสตริง 2 ตัวที่จะนำมาเปรียบเทียบกัน $str1 = "promlert"; $str2 = "Provision"; echo "<b>เปรียบเทียบโดยใช้ strcmp: </br>"; if (strcmp($str1,$str2)<0) echo "\"$str1\" น้อยกว่า \"\str2\"<br>"; elseif (strcmp($str1,$str2)>0) echo "\"$str1\" มากกว่า \"\str2\"<br>"; else echo "\"$str1\" เท่ากับ \"\str2\"<br>" echo "<b>เปรียบเทียบโดยใช้ strcasecmp: </b>"; if (strcasecmp($str1,$str2)<0) echo "\"$str1\" น้อยกว่า \"\str2\"<br>"; elseif (strcasecmp($str1,$str2)>0) echo "\"$str1\" มากกว่า \"\str2\"<br>"; else echo "\"$str1\" เท่ากับ \"\str2\"<br>"; ?>
การเปรียบเทียบสตริง • ฟังก์ชั่น strncmpและ strncasecmp ใช้เปรียบเทียบตัวอักษรจำนวนlength ตัวแรกของสตริง โดยฟังก์ชั่น strncmp จะสนใจความแตกต่างระหว่างตัวอักษรเล็กกับใหญ่ ในขณะที่ strncasecmp จะไม่สนใจ (ignore case) ผลลัพธ์ ของฟังก์ชั่นทั้งสองจะมีความหมาเยหมือนกับฟังก์ชั่น strcmpและ strcasecmp intstrncmp (string str1,string str2 , int length)
การเปรียบเทียบสตริง • ฟังก์ชั่น strnatcmpและ strnatcasemp เปรียบเทียบสตริง 2 ชุดโดยใช้ “ลำดับธรรมชาติ”(Natural Order)ซึ่งสำหรับสตริงที่มีตัวอักษรผสมกับตัวเลข (alphanumeric) จะได้ผลการเปรียบเทียบที่ตรงกับความรู้สึกของมนุษย์มากกว่าการเปรียบเทียบแบบปกติ เช่นถ้ามีสตริงอยู่ 3 ชุด คือ “img1.jpg”, “img2.jpg” และ “img10.jpg”เมื่อเปรียบเทียบโดยใช้หลักการที่อธิบายก่อนหน้านี้จะได้ลำดับจากน้อยไปมาก คือ“img1.jpg”, “img10.jpg” และ “img2.jpg” แต่ถ้าใช้ Natural Order จะได้ลำดับจากน้อยไปมากคือ “img1.jpg”, “img2.jpg” และ “img10.jpg” intstrnatcmp (string str1,string str2)
การรวมและแยกสตริง • ฟังก์ชั่น implode string implode(string ตัวเชื่อม,array อาร์เรย์ที่บรรจุสตริงต่างๆไว้ <? $arr =array("ไข่ดาว","หมูแฮม","แยมสัปปะรด"); echo "บรรทัด 1: " . implode("-",$arr). "<br>"; echo "บรรทัด 2: " . implode("/",$arr). "<br>"; echo "บรรทัด 3: " . implode(",",$arr). "<br>"; ?>
การรวมและแยกสตริง • ฟังก์ชั่น explode array explode (string ตัวแยก,string str[,int limit]) <? $filepath = "C:/Program Files/Internet Explorer/iexplore.exe"; $arr = explode("/",$filepath); print_array($arr); $arr = explode("/",$filepath,2); print_array($arr); $arr = explode("",$filepath); print_array($arr); function print_array($a){ echo "<pre>"; print_r($a); echo"</pre>"; } ?>
การจัดรูปแบบสตริง • ฟังก์ชั่น printf ฟังก์ชั่น printfใช้แสดงสตริงที่จัดรูปแบบ (formatted string)ฟังก์ชั่นนี้จะทำงานเหมือนคำสั่ง echo ถ้าระบุอาร์กิวเมนต์เพียงตัวเดียว เช่น ฟังก์ชั่นprintf จะมีประโยชน์จริงๆ เมื่อต้องการนำค่าของตัวแปรหรือนิพจน์ใส่ลงไปในสตริงโดยให้จัดรูปแบบค่านั้นตามที่กำหนด เช่น intprintf(string รูปแบบ[,mixed ค่า[,mixed...]]) printf("สวัสดีครับ"); $price = 550; printf("สินค้าชิ้นนี้ราคา %d บาท",$price);
ฟังก์ชั่น printf(ต่อ) สามารถใส่ค่าเข้าไปในสตริงได้มากกว่า 1 ค่าพร้อมกัน โดยต้องระบุ Format Specifier ภายในสตริงให้มีจำนวนและลำดับสอดคล้องกับอาร์กิวเมนต์ที่จะแทนค่าลงไป เช่น $item = "บล็อคหยอดหมีพูห์"; $price = 550; printf("สินค้า %s ราคา %d บาท",$item,$price);
ฟังก์ชั่น printf(ต่อ) ตารางแสดงตัวอย่างที่ใช้กำหนด Format Specifier
ฟังก์ชั่น printf(ต่อ) <? $name1 = "Pooh"; $name2 = "Piglet"; echo "<PRE>"; printf("%10s\n",$name1); printf("%10s\n",$name2); echo "</PRE>"; ?>
การจัดรูปแบบสตริง ฟังก์ชั่น sprintf จะจัดรูปแบบสตริงเช่นเดียวกับฟังก์ชั่น printf แต่จะส่งค่าสตริงที่จัดรูปแบบแล้วกลับมาให้แทนที่จะแสดงออกมา จึงนำสตริงที่จัดรูปแบบไปใช้งานในโปรแกรมต่อไปได้ ตัวแปร $text จะเก็บค่าสตริง “สินค้าชินนี้ราคา 550.00 บาท “ ไว้ string sprintf(string รูปแบบ[,mixed ค่า[,mixed ...]]) $price = 550; $text = sprintf("สินค้าชิ้นนี้ราคา %.2f บาท",$price);
ฟังก์ชั่นเกี่ยวกับแท็กในภาษา HTML • ฟังก์ชั่น n12br string n12br(string str) <? //สร้างค่าสตริงที่มี 3 บรรทัดเก็บไว้ในตัวแปร $text $text = "บรรทัด 1\nบรรทัด 2\nบรรทัด3\n"; echo "<h3>ผลลัพธ์เมื่อไม่ได้ใช้ฟังก์ชั่น n12br</h3>\n"; echo $text; echo "<h3>ผลลัพธ์เมื่อใช้ฟังก์ชั่น n12br</h3>\n"; echo n12br($text); ?>
ฟังก์ชั่นเกี่ยวกับแท็กในภาษา HTML • ฟังก์ชั่น htmlspecialchars string htmlspecialchars(string str[,intquote_style[,string charset]])
ฟังก์ชั่น htmlspecialchars(ต่อ) <? $input_from_user = '<a href="www.provision.co.th">ทดสอบ</a>'; echo "บรรทัด 1: " . $input_from_user . "<br>\n"; echo "บรรืทัด 2: " . htmlspecialchars($input_from_user) . "<br>\n"; ?>
สรุป • สตริง (String) คือกลุ่มของอักขระ (Character) ซึ่งอาจเป็นตัวอักษร ตัวเลข เครื่องหมายวรรคตอน หรือสัญลักษณ์พิเศษต่างๆ ก็ได้ • การเขียนค่าสตริง (String Literal) ในภาษา PHP สามารถทำได้ 3 รูปแบบ คือ สตริงแบบ single quote ,สตริงแบบ double quote และสตริงแบบheredoc • สตริงแบบ double quote และ heredoc จะมีการแทนค่าให้กับตัวแปรต่างๆ ที่ปรากฏชื่ออยู่ในสตริงและจะตีความ Escape Sequence ซึ่งหมายถึงกลุ่มอักขระที่นำหน้าด้วยเครื่องหมาย backslash ( \ ) เช่น \n จะถูกตีความเป็นการขึ้นบรรทัดใหม่ เป็นต้น ในขณะที่สตริงแบบ single quote จะไม่แทนค่าให้กับชื่อตัวแปรและไม่ตีความ Escape Sequence แต่จะมองเป็นตัวอักขระต่างๆ อย่างตรงไปตรงมา • การเข้าถึงเพื่ออ่านหรือเขียนตัวอักษรหนึ่งๆ ในสตริงจะมีรูปแบบเหมือนการเข้าถึงสมาชิกในอาร์เรย์ • เมื่อต้องการแปลงค่าใดๆเป็นชนิดสตริง ให้ใช้ตัวดำเนินการ (string) หรือใช้ฟังก์ชั่น strval
สรุป ฟังก์ชั่นเกี่ยวกับสตริงที่อธิบายในบทนี้ • ฟังก์ชั่นที่ใช้ลบ Whitespace ออกจากหัว/ท้ายของสตริง ได้แก่ trim , Itrimและ rtrim • ฟังก์ชั่นที่ใช้แปลง Case ตัวอักษร ได้แก่strtoupper, strtolower, ucfirst และ ucwords • ฟังก์ชั่นที่ใช้ทำงานกับสตริงย่อย (Substring) ได้แก่ • ฟังก์ชั่น substrใช้หาสตริงย่อยภายในสตริงที่กำหนด โดยระบุตำแหน่งเริ่มต้นและจำนวนตัวอักษรที่ต้องการ • ฟังก์ชั่น strops, strrpos, stripos และstrripos ใช้หาตำแหน่งของสตริงย่อยภายในสตริงที่กำหนด โดยระบุสตริงที่ต้องการค้นหา • ฟังก์ชั่น strstr, stristr, strchr และstrrchrใช้หาสตริงย่อยภายในสตริงที่กำหนด โดยระบุสตริงย่อยที่ต้องการค้นหา • ฟังก์ชั่น substr_replaceใช้แทนที่สตริงย่อยภายในสตริงที่กำหนด โดนระบุตำแหน่งเริ่มต้นและจำนวนตัวอักษรที่ต้องการ • ฟังก์ชั่นstr_replace และ str_ireplaceใช้แทนที่สตริงย่อยที่กำหนด โดยระบุสตริงย่อยที่ต้องการแทนที่ • ฟังก์ชั่นที่ใช้เปรียบเทียบสตริง ได้แก่ strcmp ,strcasecmp , strncmp , strncasecmp , strnatcmpและ strnatcasemp • ฟังก์ชั่นที่ใช้รวมสตริง ได้แก่ implode และฟังก์ชั่นที่ใช้แยกสตริง ได้แก่ explode • ฟังก์ชั่นที่ใช้จัดรูปแบบสตริง ได้แก่ printfและ sprint • ฟังก์ชั่นเกี่ยวกับแท็กในภาษา HTML ได้แก่ nl2br , htmlspecialcharsและ htmlentities