หลายวิธีในการลบตัวอักษรตัวแรกของ String ใน PHP
วิธีที่ 1: substr() - มาตรฐาน เร็วที่สุด
$str = 'Test';
$result = substr($str, 1); // เริ่มที่ Index 1 (ตัวที่ 2)
echo $result; // 'est'
// รองรับ Negative Offset (PHP 7+)
$result = substr($str, -1); // ตัวสุดท้าย: 't'
วิธีที่ 2: ltrim() - ลบ Character เฉพาะตัว (Character Mask)
$str = 'Demo';
$result = ltrim($str, 'D'); // ลบ 'D' ที่หน้าสตริง
echo $result; // 'emo'
// ⚠️ ltrim ลบ "ตัวอักษรใดๆ ใน Mask" ไม่ใช่ "String นั้นๆ"
$str = 'DDDemo';
$result = ltrim($str, 'D'); // 'emo' (ลบ D ทั้ง 3 ตัว!)
$str = 'ABC';
$result = ltrim($str, 'AB'); // 'C' (ลบ A และ B)
วิธีที่ 3: mb_substr() - รองรับ Multibyte (UTF-8, Thai)
$str = 'สวัสดี';
$result = mb_substr($str, 1); // 'วัสดี' (ลบ 'ส')
echo $result;
// ต้องตั้ง mbstring.internal_encoding หรือระบุ Encoding
mb_substr($str, 1, null, 'UTF-8');
วิธีที่ 4: ลบ Prefix เฉพาะ (PHP 8.0+)
$str = 'prefix_content';
// PHP 8.0+: ltrim กับ String (ไม่ใช่ Character Mask)
$result = ltrim($str, 'prefix_'); // ❌ ยังคงเป็น Character Mask!
// ใช้ str_starts_with + substr
if (str_starts_with($str, 'prefix_')) {
$result = substr($str, strlen('prefix_')); // 'content'
}
// หรือ Custom Function
function removePrefix(string $str, string $prefix): string {
return str_starts_with($str, $prefix) ? substr($str, strlen($prefix)) : $str;
}
Benchmark (String ยาว 1000 ตัวอักษร, 100,000 Iterations)
/* ประมาณ:
substr($str, 1): 0.012s
mb_substr($str, 1): 0.018s (Multibyte Overhead)
ltrim($str, 'x'): 0.015s (แต่พฤติกรรมต่าง!)
str_starts_with+substr: 0.020s
*/
// substr() เร็วที่สุดสำหรับ ASCII
// mb_substr() จำเป็นสำหรับ UTF-8/Thai
สรุป: ใช้ตัวไหนดี?
| สถานการณ์ | แนะนำ |
|---|---|
| ASCII String, ลบตัวแรก 1 ตัว | substr($str, 1) |
| UTF-8/Thai String, ลบตัวแรก 1 ตัว | mb_substr($str, 1, null, 'UTF-8') |
| ลบ Prefix String เฉพาะ (เช่น 'prefix_') | str_starts_with($str, $prefix) ? substr($str, strlen($prefix)) : $str |
| ลบ Character ชุดหน้าสตริง (Trim Chars) | ltrim($str, 'chars') |