Coding Gun

รวม String functions ใน PHP

String Functions เป็นกลุ่มของฟังก์ชั่นที่ทำงานกับข้อความ ถือเป็นกลุ่มของ functions ที่ถูกเรียกใช้งานมากที่สุด เพราะเราต้องทำงานกับ string ตลอดเวลาทั้งการตัด string ด้วย substr หรือการหาตำแหน่งของตัวอักษรที่ต้องการด้วย strpos

ในบทความนี้จะรวมเอาฟังก์ชั่นที่ใช้บ่อยๆ เพื่อที่เราจะได้จำไปใช้เฉพาะฟังก์ชั่นที่สำคัญๆก่อน ซึ่ง string functions ที่เรานำมาแนะนำในบทความนี้ประกอบด้วย

  1. strpos()
  2. substr()
  3. strlen()
  4. strtolower()
  5. strtoupper()
  6. ucfirst()
  7. ucwords()

strpos() function

เป็นฟังก์ชั่นสำหรับหาตำแหน่งของตัวอักษรหรือข้อความในข้อความที่ต้องการ
ถ้าค้นหาพบจะ return ตำแหน่งที่พบในตำแหน่งแรก ถ้าไม่พบก็จะ return FALSE กลับมา

echo strpos("PHP Training Center", "Training");

ผลลัพธ์ ที่ได้จะเป็น 4
เนื่องจากตำแหน่งของตัวอักษรเริ่มนับตั้งแต่ 0 ไม่ใช่ 1 ดังนั้นผลลัพธ์ที่ return กลับมาคือ 4 ไม่ใช่ 5

คำเตือน

การตรวจสอบว่า ค้นพบหรือไม่ต้องใช้เครื่องหมาย “===” แทนที่จะใช้ “==” เพราะถ้าเราเจอตัวอักษรนั้นตั้งแต่ตำแหน่งแรก strpos() จะ return ค่ากลับมาเป็น 0

ทำให้ if จะมองว่าเป็น FALSE เพราะถ้าเราเปรียบเทียบด้วยเครื่องหมาย “==” จะมองว่า 0 กับ FALSE มีค่าเท่ากัน

if(strpos("PHP Training Center", "PHP") === TRUE){
	// พบคำว่า PHP ในข้อความ
}

substr() Function

substr() ถือว่าเป็นฟังก์ชั้นที่เราเรียกใช้บ่อยมากๆ ใช้ในการตัดข้อความบางส่วนออกมาโดยที่รับ parameters 3 ตัวดังนี้

substr(string, offset, length)
  1. string ข้อความเต็มที่เราต้่องการตัดเอาเฉพาะบางส่วนออกมา
  2. offset ตำแหน่งเริ่มต้นของการตัดนับตาม index ของ array(ตัวอักษรตัวแรกเร่ิมต้นที่ 0)

    ถ้าใช้เครื่องหมาย - จะเป็นการนับจากด้านหลัง ตัวสุดท้ายเริ่มต้นที่ -1

  3. length ต้องการตัดออกมากี่ตัวอักษร

ตัวอย่าง การใช้ substr()

1
2
3
4
5
6
7
<?php
	echo substr('abcdef', 1);     // ผลลัพธ์จะออกมาเป็น bcdef
	echo substr('abcdef', 1, 3);  // ผลลัพธ์จะออกมาเป็น bcd
	echo substr('abcdef', 0, 4);  // ผลลัพธ์จะออกมาเป็น abcd
	echo substr('abcdef', 0, 8);  // ผลลัพธ์จะออกมาเป็น abcdef
	echo substr('abcdef', -1, 1); // ผลลัพธ์จะออกมาเป็น f
?>

substr() และ strpos()

เราจะเห็นการใช้งาน substr() ร่วมกับ strpos() อยู่บ่อยๆ นี่เป็นตัวอย่างของการใช้งาน substr() และ strpos() โดยที่เราจะหาค่าเริ่มต้นหรือ offset จากการใช้ strpos() แบบนี้

1
2
3
4
5
<?php
	$string = "PHP Training Center";
	$offset = strpos($string, "Training");
	echo substr($string,$offset,8);
?>

หรือจะเขียนรวมกันเป็นบรรทัดเดียวแบบนี้

1
2
3
4
<?php
	$string = "PHP Training Center";
    echo substr($string, strpos($string, "Training"), 8);
?>

substr() กับภาษาไทย

ถ้าเราใช้ substr() กับภาษาไทย เราจะได้ผลลัพธ์ที่ผิดพลาดแบบนี้

1
2
3
4
<?php
	$thai = "ข้อความภาษาไทย";
	echo substr($thai, 7);
?>

ผลลัพธ์ของ substr() จะออกมาเป็นภาษาต่างดาว

��ความภาษาไทย

การใช้ substr() นั้นจะทำงานอย่างถูกต้องแค่ภาษาอังกฤษเท่านั้น เนื่องจาก substr() จะทำงานกับตัวอักษรที่เป็นรหัส ASCII แต่ภาษาอื่นๆรวมทั้งภาษาไทยจะถูกเก็บเป็น utf-8 ดังนั้นการตัดข้อความที่เป็น utf-8 เราต้องใช้ mb_substr() แทน แต่ก่อนที่จะใช้งาน mb_substr() เราต้องติดตั้ง php-mbstring ก่อนด้วยคำสั่ง

sudo apt-get install php-mbstring

หลังจากติดตั้ง php-mbstring แล้วเราจะสามารถเรียกใช้ mb_substr() ได้แบบนี้

1
2
3
4
<?php
	$thai = "ข้อความภาษาไทย";
	echo mb_substr($thai, 7, "UTF-8");
?>

เราจะได้ผลลัพธ์แบบนี้

ภาษาไทย

นอกจากนี้เรายังสามารถใช้ string functions อื่นๆโดยเติมคำว่า mb_ เข้าไปข้างหน้า เช่น mb_strpos() หรือ mb_strlen()

strlen() Function

เป็นฟังก์ชั่นสำหรับการหาความยาวของข้อความ ในตัวอย่างเป็นการหาความยาวของคำว่า “PHP Training Center”

echo strlen("PHP Training Center");

ผลลัพธ์จะออกมาเป็นจำนวนตัวอักษร ซึ่งมีค่าเป็น 19

ข้อเนะนำ ส่วนใหญ่จะใช้ใน loop ที่ต้องการวนทุกๆตัวอักษรในข้อความ แล้วต้องการหาจำนวนรอบทั้งหมดที่ต้องวน

strtolower() Function

เราจะทำการเปลี่ยนข้อความทั้งหมดให้เป็นตัวพิมพิ์เล็ก(Lowercase) โดยที่ strtoupper จะรับ parameter แค่ตัวเดียวคือ string ที่ต้องการแปลงเป็นตัวพิมพิ์เล็ก

1
2
3
4
5
<?php
	$str = "Mary Had A Little Lamb and She LOVED It So";
	$str = strtolower($str);
	echo $str;
?>

ผลลัพธ์จะออกมาแบบนี้่

mary had a little lamb and she loved it so

strtoupper() Function

เราจะทำการเปลี่ยนข้อความทั้งหมดให้เป็นตัวพิมพิ์ใหญ่(Upppercase) โดยที่ strtoupper จะรับ parameter แค่ตัวเดียวคือ string ที่ต้องการแปลงเป็นตัวพิมพิ์ใหญ่

1
2
3
4
5
<?php
	$str = "Mary Had A Little Lamb and She LOVED It So";
	$str = strtoupper($str);
	echo $str;
?>

ผลลัพธ์จะออกมาแบบนี้่

MARY HAD A LITTLE LAMB AND SHE LOVED IT SO

ucfirst() Function

เป็นฟังก์ชั้นสำหรับการแปลงตัวอักษรตัวแรกของคำให้กลายเป็นตัวพิมพิ์ใหญ่

1
2
3
4
<?php
	$foo = 'hello world!';
	$foo = ucfirst($foo);             // Hello world!
?>

ข้อควรระวัง ucfirst() จะทำงานกับตัวอักษรแค่ตัวแรกเท่านั้น ดังนั้นถ้าข้อความที่ input เข้ามาเป็นตัวพิมพิ์ใหญ่ทั้งหมดจะออกมาเป็นแบบนี้

1
2
3
4
<?php
	$bar = 'HELLO WORLD!';
	$bar = ucfirst($bar);
?>

ผลลัพธ์จะออกมาเหมือนเดิมไม่มีการเปลี่ยนแปลงเนื่องจาก H เป็นตัวพิมพิ์ใหญ่อยู่แล้ว และ ucfirst() จะไม่เข้าไปยุ่งกับตัวอักษรอื่นๆ

HELLO WORLD!

ดังนั้นถ้าเราอยากจะได้ผลลัพธ์แบบตัวอย่างแรกเราต้องใส่ strtolower() เข้าไปก่อนแบบนี้

$bar = ucfirst(strtolower($bar));

ผลลัพธ์จะออกมาเป็น

Hello world!

ucwords() Function

เป็น function ที่ทำงานเหมือนกับ ucfirst() แต่ทำกับทุกๆคำ

1
2
3
4
<?php
	$foo = 'hello world!';
	$foo = ucwords($foo);
?>

ผลลัพธ์จะออกมาเป็น

Hello World!

และเช่นเดียวกับตัวอย่างของ ucfirst() ฟังก์ชั่น ucwords() จะทำงานกับตัวอักษรตัวแรกของแต่ละคำเท่านั้น ดังนั้นตัวอักษรอื่นๆ ucwords() ก็จะไม่เข้าไปยุ่ง ซึ่งถ้าเราใส่ข้อความที่เป็นตัวพิมพิ์ใหญ่เข้าไปจะได้ผลลัพธ์แบบนี้

1
2
3
4
<?php
	$bar = 'HELLO WORLD!';
	$bar = ucwords($bar);
?>

ผลลัพธ์จะออกมาเป็น HELLO WORLD! เหมือนเดิม ดังนั้นถ้าเราต้องการให้ผลลัพธ์ออกมาเป็น Hello World! เราต้องใช้ strtolower() ปรับให้อักขระทุกตัวเป็นตัวพิมพิ์เล็กก่อนแบบนี้

$bar = ucwords(strtolower($bar)); // Hello World!

ถ้าเราไม่ได้ใช้ sperator เป็น เว้นวรรค(spcae), tab หรือ ขึ้นบรรทัดใหม่ เราสามารถใส่ sperator เข้าไปเป็น parameter ตัวที่ 2 ได้แบบนี้

1
2
3
4
5
<?php
	$foo = 'hello|world!';
	$bar = ucwords($foo);             // Hello|world!
	$baz = ucwords($foo, "|");        // Hello|World!
?>

ในตัวอย่างนี้เราใช้ “|” เป็นตัวคั่นระหว่างคำ

ใน PHP ยังมี string functions อีกมากมายให้เราเลือกใช้ ซึ่งสามารถเข้าไปดู function อื่นๆเพิ่มเติมได้ที่ String Functions

Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security