ฉันจะลบลูกน้ำออกจากท้ายสตริงได้อย่างไร


119

ฉันต้องการลบลูกน้ำออกจากส่วนท้ายของสตริง ขณะนี้ฉันกำลังใช้

$string = substr($string,0,-1);

แต่จะลบเฉพาะอักขระสุดท้ายของสตริง ฉันกำลังเพิ่มสตริงแบบไดนามิกดังนั้นบางครั้งจึงไม่มีเครื่องหมายจุลภาคที่ท้ายสตริง ฉันจะให้ PHP ลบลูกน้ำออกจากส่วนท้ายของสตริงได้อย่างไรหากมีอยู่ท้ายสตริง

คำตอบ:


303

27
การดำเนินการนี้จะลบเครื่องหมายจุลภาคหลายรายการ: "a, b ,,," จะกลายเป็น "a, b" ไม่ว่าจะเป็นสิ่งที่ OP ต้องการหรือไม่ฉันไม่รู้ ...
Greg

1
ขอบคุณฉันทำสิ่งนี้กับ substr, strlen, ... มาทั้งชีวิต
Farhad

38

นี่เป็นคำถามคลาสสิกที่มีสองคำตอบ หากคุณต้องการลบเครื่องหมายจุลภาคเพียงตัวเดียวซึ่งอาจมีหรือไม่มีอยู่ให้ใช้:

if (substr($string, -1, 1) == ',')
{
  $string = substr($string, 0, -1);
}

หากคุณต้องการลบเครื่องหมายจุลภาคทั้งหมดออกจากท้ายบรรทัดให้ใช้วิธีที่ง่ายกว่า:

$string = rtrim($string, ',');

ฟังก์ชัน rtrim (และ ltrim ที่เกี่ยวข้องสำหรับการตัดด้านซ้าย) มีประโยชน์มากเนื่องจากคุณสามารถระบุช่วงของอักขระที่จะลบได้เช่นการลบเครื่องหมายจุลภาคและช่องว่างต่อท้ายที่คุณจะเขียน:

$string = rtrim($string, ", \t\n");

ขอบคุณสำหรับคำอธิบายโดยละเอียด ที่ชี้แจงสิ่งต่างๆ!
zeckdude

12

ฉันเดาว่าคุณกำลังเชื่อมต่อบางสิ่งในลูปเช่น

foreach($a as $b)
  $string .= $b . ',';

ที่ดีกว่ามากคือการรวบรวมรายการในอาร์เรย์แล้วรวมเข้ากับตัวคั่นที่คุณต้องการ

foreach($a as $b)
  $result[] = $b;

$result = implode(',', $result);

วิธีนี้ช่วยแก้ปัญหาการต่อท้ายและตัวคั่นสองเท่าที่มักเกิดขึ้นกับการเรียงต่อกัน


ข้อเสนอแนะที่ดี อย่างไรก็ตามการเชื่อมต่อทั้งหมดอาจไม่เกิดขึ้นใน PHP ในกรณีของฉันฉันกำลังส่งสตริงที่ต่อด้วย Javascript เพื่อให้ PHP คลี่คลาย
Sablefoste

4

หากคุณเชื่อมต่อบางสิ่งในลูปคุณสามารถทำได้ด้วยวิธีนี้เช่นกัน:

$coma = "";
foreach($a as $b){
    $string .= $coma.$b;
    $coma = ",";
}



1

นิพจน์ทั่วไปธรรมดาจะใช้ได้ผล

$string = preg_replace("/,$/", "", $string)

2
นักพัฒนาใช้นิพจน์ทั่วไปในการแก้ปัญหาและตอนนี้เขามีปัญหาสองอย่าง
Sigurd


1

ฉันมีช่องว่างที่ "มองไม่เห็น" ที่น่ารำคาญที่ส่วนท้ายของสตริงและต้องทำสิ่งนี้

 $update_sql=rtrim(trim($update_sql),',');

แต่วิธีแก้ปัญหาข้างต้นจะดีกว่า

 $update_sql=rtrim($update_sql,', ');

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.