Jak usunąć pierwszy znak ciągu znaków w PHP?


Odpowiedzi:


330

Aby usunąć każdy :z początku łańcucha, możesz użyć ltrim :

$str = '::f:o:';
$str = ltrim($str, ':');
var_dump($str); //=> 'f:o:'

109
Zauważ, że lrtim usunie wszystko :::::. Czasami nie jest to pożądane zachowanie.
KR

5
zwróć uwagę, że jest to przeznaczone tylko dla pojedynczych znaków. ltrim będzie przyciąć wszystkie znaki w podanym ciągu znaków: ltrim('prefixprefix_postfix', 'prefix')wyniki w'_postfix';
Cody Django

556

substr()Funkcja będzie prawdopodobnie pomóc tutaj:

 $str = substr($str, 1);

Łańcuchy są indeksowane od 0, a ten drugi parametr funkcji uruchamia cutstart. Więc zrób 1, a pierwszy znak zniknie.


35
Uważaj na Unicode. Jeśli masz do czynienia z dowolnym ciągiem znaków (np. „Ål <- danish for eel”), powinieneś użyć mb_substr i określić kodowanie.
Thomas Jensen,

nie jest to poprawna implementacja, nie działa z ciągiem znaków „a”. jeśli spróbujesz łańcucha
jednoznakowego

2
@anru Instrukcja podaje, że jeśli długość łańcucha jest równa parametrowi początkowemu, zostanie zwrócony pusty ciąg. Przed wersją 7 falsezostał zwrócony. Musisz więc sprawdzić, czy są równe, jeśli nie jest to pożądane zachowanie.
rybo111

95

Użyj substr :

$str = substr($str, 1); // this is a applepie :)

Doskonała odpowiedź! Dzięki za udostępnienie! Nie jestem jednak pewien, czy rozumiem komentarz w twoim kodzie na temat aplikacji. oO
HoldOffHunger

64

Czas wykonania dla 3 odpowiedzi:

Usuń pierwszą literę, zastępując obudowę

$str = "hello";
$str[0] = "";
// $str[0] = false;
// $str[0] = null;
// replaced by �, but ok for echo

Czas wykonania dla 1.000.000 testów: 0.39602184295654sek


Usuń pierwszą literę z substr ()

$str = "hello";
$str = substr($str, 1);

Czas wykonania dla 1.000.000 testów: 5.153294801712sek


Usuń pierwszą literę za pomocą ltrim ()

$str = "hello";
$str= ltrim ($str,'h');

Czas wykonania dla 1.000.000 testów: 5.2393000125885sek


Usuń pierwszą literę za pomocą preg_replace ()

$str = "hello";
$str = preg_replace('/^./', '', $str);

Czas wykonania dla 1.000.000 testów: 6.8543920516968sek


Dzięki. Zobacz jednak moją aktualizację. To spowodowało problem podczas używania zaktualizowanego ciągu w zapytaniu SQL.
rybo111

6
Właśnie wypróbowałem $str[0] = '';rozwiązanie i nie zadziałało. robi to jednak dobrze, jeśli planujesz na przykład użyć zmiennej do porównania, bo >inaczej <nie zadziała. Nadal liczy się jako `` jak + '', na przykład $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: Natknąłem się na ten sam problem podczas pobierania rekordów z interfejsu API za pomocą słowa kluczowego. Próbowałem, var_dump($keyword)który wyświetlał poprzednią długość znaku. Potem spróbowałem przyciąć słowo kluczowe, a potem zadziałało var_dump(trim($keyword)). Mam nadzieję, że to komuś pomoże :)
Syed Qarib,

3
To nie działa. Pozycja „usunięta” jest zastąpiona bajtem zerowym, więc zamiast „cześć” pojawia się „\ 0hello”.
Josef Kufner

1
Pojawia się komunikat „Ostrzeżenie: nie można przypisać pustego łańcucha do przesunięcia łańcucha” dla $ str [0] = "";
Francisco Luz


11

Aby usunąć pierwszy znak ciągu znaków w PHP,

$string = "abcdef";     
$new_string = substr($string, 1);

echo $new_string;
Generates: "bcdef"

9
$str = substr($str, 1);

Zobacz podręcznik PHP 3 przykład

echo substr('abcdef', 1);     // bcdef

Uwaga:

unset($str[0]) 

nie będzie działać, ponieważ nie można rozbroić części ciągu: -

Fatal error: Cannot unset string offsets

9

Aktualizacja

Po dalszych testach nie polecam już tego używać. To spowodowało problem podczas używania zaktualizowanego ciągu w zapytaniu MySQL i zmiany w celu substrrozwiązania problemu. Myślałem o usunięciu tej odpowiedzi, ale komentarze sugerują, że jest ona jakoś szybsza, więc ktoś może ją wykorzystać. Może się okazać, że przycięcie zaktualizowanego łańcucha rozwiąże problemy z długością łańcucha.


Czasami nie potrzebujesz funkcji:

$str[0] = '';

Na przykład:

$str = 'AHello';
$str[0] = '';
echo $str; // 'Hello'

Ta metoda modyfikuje istniejący ciąg zamiast tworzyć inny.


To też wydaje się szybsze.
Emanuil Rusev

@EmanuilRusev jak to zrobić? Ciekawe, czy masz na myśli szybsze pisanie lub szybsze działanie.
rybo111

Mam na myśli, że działa szybciej.
Emanuil Rusev

@EmanuilRusev Byłbym zainteresowany, gdybyś mógł podać statystyki, które dodam do odpowiedzi.
rybo111

1
Uważaj na to. Poniższy kod wyświetla wynik bool (false). $ foo = „book”; $ bar = „książka”; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
thinkrepo

8

Akceptowana odpowiedź:

$str = ltrim($str, ':');

działa, ale usunie wiele, :jeśli na początku jest więcej niż jeden.

$str = substr($str, 1);

usunie dowolną postać od początku.

Jednak,

if ($str[0] === ':')
    $str = substr($str, 1);

działa świetnie.


6

możesz użyć funkcji sbstr ()

$amount = 1;   //where $amount the the amount of string you want to delete starting  from index 0
$str = substr($str, $amount);

2

Przycina wystąpienia każdego słowa w tablicy od początku i końca łańcucha + białych znaków i opcjonalnie dodatkowych pojedynczych znaków, jak w przypadku zwykłego przycinania ()

<?php
function trim_words($what, $words, $char_list = '') {
    if(!is_array($words)) return false;
    $char_list .= " \t\n\r\0\x0B"; // default trim chars
    $pattern = "(".implode("|", array_map('preg_quote', $words)).")\b";
    $str = trim(preg_replace('~'.$pattern.'$~i', '', preg_replace('~^'.$pattern.'~i', '', trim($what, $char_list))), $char_list);
    return $str;
}

// for example:
$trim_list = array('AND', 'OR');

$what = ' OR x = 1 AND b = 2 AND ';
print_r(trim_words($what, $trim_list)); // => "x = 1 AND b = 2"

$what = ' ORDER BY x DESC, b ASC, ';
print_r(trim_words($what, $trim_list, ',')); // => "ORDER BY x DESC, b ASC"
?>

1

Kod działa dobrze dla mnie.

$str = substr($str ,-(strlen($str)-1));

Może również udzielić odpowiedzi.


1
ten nie działa z ciągiem
jednoznakowym

Masz rację =) Więc uwierz, że możliwym rozwiązaniem byłoby przetestowanie, zanim będzie zawierała tylko jedną postać. Na przykład: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Lub $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; ponieważ chodzi o to, aby usunąć ostatnią postać, jeśli masz tylko jedną ...: P
Claudionor Oliveira

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.