ฉันต้องการลบคำแรกออกจากสตริงโดยใช้ PHP พยายามค้นหาแต่ก็ไม่พบคำตอบที่พอจะเข้าใจได้
เช่น "เสื้อกล้ามสีขาว" เลยกลายเป็น "เสื้อกล้าม"
ขอบคุณ
ฉันต้องการลบคำแรกออกจากสตริงโดยใช้ PHP พยายามค้นหาแต่ก็ไม่พบคำตอบที่พอจะเข้าใจได้
เช่น "เสื้อกล้ามสีขาว" เลยกลายเป็น "เสื้อกล้าม"
ขอบคุณ
ไม่จำเป็นต้องระเบิดหรือจัดการอาร์เรย์ คุณสามารถใช้ฟังก์ชัน strstr ได้:
echo strstr("White Tank Top"," ");
//Tank Top
อัปเดต: ขอบคุณ @Sid หากต้องการลบพื้นที่สีขาวพิเศษที่คุณสามารถทำได้:
echo substr(strstr("White Tank Top"," "), 1);
strtr
ไปตลอด กำลังจะพิมพ์ 3 บรรทัดโดยใช้ strpos
+ substr
เมื่อฉันเห็นคำตอบของคุณ เพิ่ม ltrim
ในกรณีที่มีหลายช่องว่างและคุณเป็นสีทอง
- person Fanis Hatzidakis; 26.07.2011
strlen
หรือรันมันในดีบักเกอร์แล้วคุณจะเห็น :)
- person Fanis Hatzidakis; 26.07.2011
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"
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;
}
ลองใช้ฟังก์ชั่นนี้ ฉันหวังว่ามันจะเหมาะกับคุณ
หากคุณไม่รับประกันว่าจะมีช่องว่างในสาย ให้ระมัดระวังในการเลือกเทคนิคที่จะไม่ล้มเหลวในกรณีเช่นนี้
หากใช้ 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
จับคู่อักขระช่องว่างหนึ่งตัว
return implode(' ', array_shift(explode(' ', $sentence)));
ได้ไหม? ฉันไม่เคยมั่นใจกับ php เลย
- person Patrick Perini; 26.07.2011