как удалить первое слово из строки 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 пробел в начале ты имеешь в виду? я только что дал ему чек, и он работал нормально для меня, вы можете проверить? - 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 с регулярным выражением ^(\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

Я предпочитаю метод регулярных выражений, потому что он стабилен во всех вышеперечисленных случаях и представляет собой вызов одной функции. Обратите внимание, что в группе захвата нет необходимости, так как полное соответствие строки заменяется. ^ соответствует началу строки, \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: нет - array_shift() возвращает первый элемент в массиве, а не измененный массив - person symcbean; 26.07.2011
comment
@Sid: во-первых, ответ amosrivera семантически отличается (посмотрите, что происходит со строкой, не содержащей пробелов), и я бы вряд ли назвал это пожирателем памяти - я ожидаю, что он будет использовать больше памяти, чем ответ amosrivera - но без тестирования каждого метода, который я могу не сказать, что имеет больший эффективный след в системе. - person symcbean; 26.07.2011
comment
Свинья или нет, в этом ответе отсутствует объяснение. Дело в том, что ваш фрагмент выполняет слишком много взрывов. Пожалуйста, смотрите мой ограниченный взрыв. - person mickmackusa; 21.11.2019