Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ลบตัวอักษรแรกของ String ใน PHP

หลายวิธีในการลบตัวอักษรตัวแรกของ 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')