<?php $rest = substr("abcdef", 1); // returns "bcdef" $rest = substr("abcdef", 1, 3); // returns "bcd" $rest = substr("abcdef", 0, 4); // returns "abcd" $rest = substr("abcdef", 0, 8); // returns "abcdef" ?> <?php $rest = substr("abcdef", -1); // returns "f" เริ่มนับจากตัว f $rest = substr("abcdef", -2); // returns "ef" เริ่มนับจากตัว e $rest = substr("abcdef", -3, 1); // returns "d" เริ่มนับจากตัว d ?> <?php $rest = substr("abcdef", 8,4); // returns FALSE ข้อความยาวแค่ 6 ตัวอักษร // แต่ค่า start เป็น 8 มากกว่าความยาวของค่าความจึงส่งค่ากลับมาเป็น FALSE ?>
กรณีค่า length มีค่าเป็นบวก หมายถึงจำนวนข้อความที่ต้องการตัดเท่ากับค่า length นั้นๆ
กรณีค่า length มีค่าเป็นลบ หมายถึงการระบุตำแหน่งสุดท้ายของข้อความที่ต้องการ โดยตัดข้อความที่นับจากด้านหลังออก เช่น -1 หมายถึงนับจากตัวสุดท้ายมา 1 ตัวให้ตัดออกไป
ตัวอย่างกรณีค่า length มีค่าเป็นลบ
<?php $rest = substr("abcdef", 0, -1); // returns "abcde" // ตัดข้อความจากตัวแรก a ไปจนถึง ตัว e โดยตัดข้อความที่นับจากหลังมา 1 ตัวออกไป $rest = substr("abcdef", 2, -1); // returns "cde" $rest = substr("abcdef", 4, -4); // returns "" $rest = substr("abcdef", -3, -1); // returns "de" ?>
กรณีตัดข้อความที่เป็นภาษาไทยแล้วแสดงเป็นสัญลักษณ์แปลกๆ ให้ใช้คำสั่ง mb_substr() แทน
โดยรูปแบบการใช้งานก็จะคล้ายๆ กับ substr()
ตัวอย่าง
<?php $text = "วันนี้ทดสอบบบ"; echo mb_substr($text,0,-2); // จะได้ผลลัพธ์เป็น "วันนี้ทดสอบ" ?>
เราสามารถใช้คำสั่ง str_split() เพื่อแยกตัวอักษรแต่ละตัวในข้อความได้ โดยจะคืนค่าเป็น array
เช่น
$text = "This is a test"; $arr_char = str_split($text); print_r($arr_char);
ผลลัพธ์ที่ได้
Array ( [0] => T [1] => h [2] => i [3] => s [4] => [5] => i [6] => s [7] => [8] => a [9] => [10] => t [11] => e [12] => s [13] => t )
สามารถกำหนด การแยกทีละ กี่ตัวอักษรก็ได้ เช่นแยกทีละ 3 ตัว
$text = "This is a test"; $arr_char = str_split($text,3); print_r($arr_char);
ผลลัพธ์ที่ได้
Array ( [0] => Thi [1] => s i [2] => s a [3] => te [4] => st )
สังเกตว่า จะรวมช่องว่างนับเข้าไปด้วย
วิธีการแยกตัวอักษรจากวิธีข้างต้น โดยใช้คำสั่ง str_split() ไม่สามารถใช้งานได้ กับการแยก
ตัวอักษรภาษาไทย แต่เราสามารถใช้ คำสั่ง preg_match_all() สำหรับกรณีภาษาไทย ได้ดังนี้
$text = "ภาษาไทย"; preg_match_all('/./u',$text,$arr_char); print_r($arr_char);
ผลลัพธ์ที่ได้
Array ( [0] => Array ( [0] => ภ [1] => า [2] => ษ [3] => า [4] => ไ [5] => ท [6] => ย ) )
คำสั่ง preg_match_all() ข้างต้นคือ ค้นหาจากการเปรียบเทียบ regular expression โดยใช้
/./u เทียบกับข้อความในตัวแปร $text ซึ่ง . คือ ตัวอักษรใดๆ ส่วน u คือการระบุให้อยู่ในรูปแบบ
UTF-8 ซึ่งสำคัญสำหรับกรณีภาษาไทย
โดยเมื่อได้ตัวอักษรแต่ละตัวก็เอาไปเก็บในตัวแปร array ที่ชื่อ $arr_char
การตัดตัวอักษรซ้ำ ตัวอักขระซ้ำ อักษรที่เกินให้เหลือตัวเดียว
แนวทางคำสั่งต่อไปนี้ ใช้สำหรับการแทนที่ตัวอักษรหรือตัวอักขระ ที่พิมพ์ติดๆ กันซ้ำ ซึ่งง
อาจจะเกิดจากการพิมพ์ผิดพลาดหรือเหตุผลใด ตัวอย่างเช่น
เราจะเห็นว่าคำว่า “สอบ” มีตัว “บ” ซ้ำมาถึง 4 ตัว เราต้องการจะให้แสดงแค่ตัวเดียวจะทำอย่างไร
นอกจากนี้ แนวทางที่จะแนะนำยังประยุกต์ได้ดังนี้
- ถ้ามีตัวซ้ำมากกว่า 1 ตัวขึ้นไป
- ถ้ามีตัวซ้ำมากกว่า n ตัวขึ้นไป
การประยุกต์แรก ตัวซ้ำมากกว่า 1 ตัวขึ้นไป
<?php $text = "วันนี้ทดสอบบบ"; $text = preg_replace('/(.)\1+/u','$1',$text); echo $text; // จะได้เป็น "วันี้ทดสอบ"
จะเห็นว่ากรณีแรกจะใช้ได้ผลเฉพาะบางคำ และปกติไม่ค่อยใช้เท่าไหร่ เพราะโอกาส ที่ตัวอักษรจะติด
กันอย่างน้อยสองตัว เป็นไปได้เสมอในหลายๆ คำ ดังนั้นตัวอย่างข้างต้น คำว่า “ทอสอบ” จะแสดงได้
ถูกต้อง แต่คำว่า “วันนี้” กลับตัดเหลือแค่ “วันี้” ซึ่งยังไม่ถูกต้อง เราจึงใช้วิธีที่สอง
เงื่อนไขคือซ้ำกันสองตัวไม่ต้องตัด ซ้ำกันเกินสองตัวให้ตัดเหลือตัวเดียว จะได้เป็น
<?php $text = "วันนี้ทดสอบบบ"; $text = preg_replace('/(.)\1{2,}/u','$1',$text);echo $text; echo $text; // จะได้เป็น "วันนี้ทดสอบ"
จะเห็นว่าคำว่า “วันนี้” มี “น” ติดกันแค่สองตัว จึงไม่ตัดเหลือตัวเดียว
ในขณะที่คำว่า “ทดสอบบบ” มี “บ” ติดกันเกินสองตัว จัดตัดเหลือตัวเดียว
หากเราต้องการประยุกต์โดยเพิ่มเงื่อนไขเช่นว่า มากกว่า 3, 4 หรือ n ตัว แล้วให้ตัดเหลือตัวเดียว
ก็ให้เปลี่ยนตัวเลขเป็นตามจำนวนที่ต้องการเช่น สมมติ มากกว่า 3 ตัวหรือเท่ากับ 4 ตัวขึ้นไปก็
จะใช้เป็น
<?php $text = "ววววันนี้ทดสอบบบบ"; $text = preg_replace('/(.)\1{3,}/u','$1',$text);echo $text; echo $text;