วิธีลบคำแรกออกจากสตริง php

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

เช่น "เสื้อกล้ามสีขาว" เลยกลายเป็น "เสื้อกล้าม"

ขอบคุณ


person Monkeyalan    schedule 25.07.2011    source แหล่งที่มา
comment
คุณหมายถึงตัวละครที่อยู่หน้าช่องว่างแรกใช่ไหม?   -  person PeeHaa    schedule 26.07.2011


คำตอบ (5)


ไม่จำเป็นต้องระเบิดหรือจัดการอาร์เรย์ คุณสามารถใช้ฟังก์ชัน strstr ได้:

echo strstr("White Tank Top"," ");
//Tank Top

อัปเดต: ขอบคุณ @Sid หากต้องการลบพื้นที่สีขาวพิเศษที่คุณสามารถทำได้:

echo substr(strstr("White Tank Top"," "), 1);
person amosrivera    schedule 25.07.2011
comment
นี่ดีกว่าคำตอบการจัดการอาเรย์ แต่จะทำให้อักขระเว้นวรรคหายไปเช่นกัน สิ่งนี้สามารถตัดออกได้โดยทำ echo substr(strstr(White Tank Top, ), 1); - person Sid; 26.07.2011
comment
+1 เพื่อความเรียบง่าย ฉันลืม strtr ไปตลอด กำลังจะพิมพ์ 3 บรรทัดโดยใช้ strpos + substr เมื่อฉันเห็นคำตอบของคุณ เพิ่ม ltrim ในกรณีที่มีหลายช่องว่างและคุณเป็นสีทอง - person Fanis Hatzidakis; 26.07.2011
comment
@Sid white space ที่จุดเริ่มต้นคุณหมายถึงอะไร? ฉันเพิ่งตรวจสอบมันและมันก็ใช้ได้ดีสำหรับฉัน คุณช่วยยืนยันได้ไหม? - person amosrivera; 26.07.2011
comment
@Fanis ฉันเข้าใจคุณแล้ว ด้วยฟังก์ชั่นต่าง ๆ มากมายสำหรับการจัดการสตริงใน php นั้นง่ายต่อการลืม - person amosrivera; 26.07.2011
comment
@amosrivera เช่น @Sid กล่าวว่ามันจะรวมพื้นที่ที่ตรงกันด้วย คุณจะไม่เห็นมันง่ายๆ ด้วยการสะท้อนออกมาบนหน้าเว็บ แต่ให้ทำ strlen หรือรันมันในดีบักเกอร์แล้วคุณจะเห็น :) - person Fanis Hatzidakis; 26.07.2011
comment
@Sid @Fanis strlen แสดงพื้นที่สีขาวที่น่าสนใจ เพิ่มวิธีแก้ปัญหาของคุณให้กับคำตอบขอบคุณ! - person amosrivera; 26.07.2011

คุณสามารถใช้ฟังก์ชัน preg_replace กับ regex ^(\w+\s) ที่จะจับคู่คำแรกของสตริงตามลำดับ:

$str = "White Tank Top";
$str = preg_replace("/^(\w+\s)/", "", $str);
var_dump($str); // -> string(8) "Tank Top"
person Alex    schedule 27.05.2016

function remove_word($sentence)
{
    $exp = explode(' ', $sentence);
    $removed_words = array_shift($exp);
    if(count($exp)>1){
        $w = implode(' ', $exp);
    }else{
        $w = $exp[0];
    }
    return $w;
}

ลองใช้ฟังก์ชั่นนี้ ฉันหวังว่ามันจะเหมาะกับคุณ

person Chirag Pipariya    schedule 11.02.2015

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

หากใช้ explode() อย่าลืมจำกัดการระเบิดเพื่อประสิทธิภาพที่ดีที่สุด

การสาธิต:

$strings = ["White", "White Tank", "White Tank Top"];
foreach ($strings as $string) {
    echo "\n{$string}:";
    echo "\n-\t" , substr($string, 1 + (strpos($string, ' ') ?: -1));

    $explodeOnce = explode(' ', $string, 2);
    echo "\n-\t" , end($explodeOnce);              

    echo "\n-\t" , substr(strstr($string, " "), 1);

    echo "\n-\t" , ltrim(strstr($string, " "));

    echo "\n-\t" , preg_replace('~^\S+\s~', '', $string);
}

เอาท์พุท:

White:
-   White
-   White
-                       // strstr() returned false
-                       // strstr() returned false  
-   White
White Tank:
-   Tank
-   Tank
-   Tank
-   Tank
-   Tank
White Tank Top:
-   Tank Top
-   Tank Top
-   Tank Top
-   Tank Top
-   Tank Top

ความชอบของฉันคือเทคนิค regex เพราะมันเสถียรในทุกกรณีข้างต้นและเป็นการเรียกใช้ฟังก์ชันเดียว โปรดทราบว่าไม่จำเป็นต้องมีแคปเจอร์กรุ๊ป เนื่องจากการจับคู่สตริงเต็มกำลังถูกแทนที่ ^ ตรงกับจุดเริ่มต้นของสตริง \S+ จับคู่อักขระที่ไม่ใช่ช่องว่างอย่างน้อยหนึ่งตัว และ \s จับคู่อักขระช่องว่างหนึ่งตัว

person mickmackusa    schedule 21.11.2019

person    schedule
comment
คุณช่วยย่อมันลงไปเป็น return implode(' ', array_shift(explode(' ', $sentence))); ได้ไหม? ฉันไม่เคยมั่นใจกับ php เลย - person Patrick Perini; 26.07.2011
comment
วิธีแก้ปัญหานี้เป็นหมูหน่วยความจำ หากสตริงมีช่องว่างจำนวนมาก อาร์เรย์จะมีขนาดใหญ่ วิธีแก้ปัญหาของ amosrivera นั้นดีกว่ามาก (แม้ว่าจะยังไม่สมบูรณ์นักเพราะมันออกจากอักขระเว้นวรรคด้วย) - person Sid; 26.07.2011
comment
@Patrick Perini: no - array_shift() ส่งคืนองค์ประกอบแรกในอาร์เรย์ - ไม่ใช่อาร์เรย์ที่แก้ไข - person symcbean; 26.07.2011
comment
@Sid: ประการแรกคำตอบของ amosrivera นั้นแตกต่างกันทางความหมาย (พิจารณาว่าเกิดอะไรขึ้นกับสตริงที่ไม่มีช่องว่าง) นอกจากนี้ฉันแทบจะไม่เรียกสิ่งนี้ว่าหมูหน่วยความจำ - ฉันคาดหวังว่ามันจะใช้หน่วยความจำมากกว่าคำตอบของ amosrivera - แต่ไม่มีการทดสอบแต่ละวิธีที่ฉันทำได้ อย่าบอกว่าระบบใดมีรอยเท้าที่มีประสิทธิภาพมากกว่า - person symcbean; 26.07.2011
comment
หมูหรือเปล่าคำตอบนี้ไม่มีคำอธิบาย ประเด็นก็คือ ข้อมูลโค้ดของคุณมีการระเบิดมากเกินไป โปรดดูการระเบิดที่จำกัดของฉัน - person mickmackusa; 21.11.2019