Wie entferne ich das erste Zeichen einer Zeichenfolge in PHP?


Antworten:


330

Um alle Zeichen: vom Anfang eines Strings zu entfernen , können Sie ltrim verwenden :

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

109
Beachten Sie, dass lrtim alle entfernt :::::. Manchmal ist dies kein gewünschtes Verhalten.
AdR

5
Beachten Sie, dass dies nur für einzelne Zeichen vorgesehen ist. ltrim schneidet alle Zeichen in der bereitgestellten Zeichenfolge: ltrim('prefixprefix_postfix', 'prefix')Ergebnisse in'_postfix';
Cody Django

556

Die substr()Funktion wird Ihnen hier wahrscheinlich helfen:

 $str = substr($str, 1);

Strings werden ab 0 indiziert, und dieser zweite Parameter der Funktion übernimmt den Cutstart. Machen Sie also diese 1, und das erste Zeichen ist weg.


35
Achten Sie auf Unicode. Wenn Sie mit einer beliebigen Zeichenfolge arbeiten (z. B. "Ål <- dänisch für Aal"), sollten Sie mb_substr verwenden und die Codierung angeben.
Thomas Jensen

Dies ist keine korrekte Implementierung, sie funktioniert nicht mit einer einzelnen Zeichenfolge "a". Wenn Sie eine einzelne Zeichenfolge versuchen, gibt substr einen booleschen Wert zurück
bis zum

2
@anru Das Handbuch gibt an, dass eine leere Zeichenfolge zurückgegeben wird, wenn die Zeichenfolgenlänge dem Startparameter entspricht. Vor Version 7 falsewurde zurückgegeben. Sie müssten also überprüfen, ob sie gleich sind, wenn dies nicht das gewünschte Verhalten ist.
Rybo111

95

Verwenden Sie substr :

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

Hervorragende Antwort! Danke für das Teilen! Ich bin mir nicht ganz sicher, ob ich den Kommentar in Ihrem Code zu Applepie verstehe. oO
HoldOffHunger

64

Ausführungszeit für die 3 Antworten:

Entfernen Sie den ersten Buchstaben, indem Sie das Gehäuse ersetzen

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

Ausführungszeit für 1.000.000 Tests: 0.39602184295654Sek


Entfernen Sie den ersten Buchstaben mit substr ()

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

Ausführungszeit für 1.000.000 Tests: 5.153294801712Sek


Entfernen Sie den ersten Buchstaben mit ltrim ()

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

Ausführungszeit für 1.000.000 Tests: 5.2393000125885Sek


Entfernen Sie den ersten Buchstaben mit preg_replace ()

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

Ausführungszeit für 1.000.000 Tests: 6.8543920516968Sek


Vielen Dank. Siehe mein Update. Es hat ein Problem für mich verursacht, wenn ich die aktualisierte Zeichenfolge in einer SQL-Abfrage verwendet habe.
Rybo111

6
Ich habe gerade die $str[0] = '';Lösung ausprobiert und es hat nicht funktioniert. Nun, es funktioniert jedoch, wenn Sie dann vorhaben, die Variable zum Vergleichen zu verwenden, >oder <es funktioniert nicht. Es zählt zum Beispiel immer noch als + $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: Ich bin beim Abrufen von Datensätzen von einer API mit einem Schlüsselwort auf dasselbe Problem gestoßen. Es wurde versucht var_dump($keyword), die vorherige Zeichenlänge anzuzeigen . Dann habe ich versucht, das Schlüsselwort zu kürzen, und dann hat es gut funktioniert var_dump(trim($keyword)). Ich hoffe, das hilft jemandem. :)
Syed Qarib

3
Das funktioniert nicht. Die Position "entfernt" wird durch ein Null-Byte ersetzt, sodass Sie "\ 0hello" anstelle von "hallo" erhalten.
Josef Kufner

1
Ich erhalte die Meldung "Warnung: Einem String-Offset kann keine leere Zeichenfolge zugewiesen werden" für $ str [0] = "";
Francisco Luz

25

Hier ist der Code

$str = substr($str, 1); 

echo $str;

Ausgabe:

this is a applepie :)

11

Um das erste Zeichen der Zeichenfolge in PHP zu entfernen,

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

echo $new_string;
Generates: "bcdef"

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

Siehe PHP-Handbuch Beispiel 3

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

Hinweis:

unset($str[0]) 

funktioniert nicht, da Sie einen Teil einer Zeichenfolge nicht deaktivieren können: -

Fatal error: Cannot unset string offsets

9

Aktualisieren

Nach weiteren Tests empfehle ich die Verwendung nicht mehr. Es hat ein Problem für mich verursacht, als ich die aktualisierte Zeichenfolge in einer MySQL-Abfrage verwendet und substrdas Problem behoben habe. Ich habe darüber nachgedacht, diese Antwort zu löschen, aber Kommentare deuten darauf hin, dass sie irgendwie schneller ist, sodass jemand eine Verwendung dafür haben könnte. Möglicherweise werden beim Trimmen der aktualisierten Zeichenfolge Probleme mit der Zeichenfolgenlänge behoben.


Manchmal brauchen Sie keine Funktion:

$str[0] = '';

Beispielsweise:

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

Diese Methode ändert die vorhandene Zeichenfolge, anstatt eine andere zu erstellen.


Dies scheint auch schneller zu sein.
Emanuil Rusev

@EmanuilRusev wie so? Nur neugierig, ob Sie meinen, es ist schneller zu tippen oder es läuft schneller.
Rybo111

Ich meine, dass es schneller läuft.
Emanuil Rusev

@EmanuilRusev Es würde mich interessieren, ob Sie einige Statistiken bereitstellen könnten, die ich der Antwort hinzufügen werde.
Rybo111

1
Ich muss vorsichtig damit sein. Der folgende Code gibt bool (false) aus. $ foo = 'Buch'; $ bar = 'Buch'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
Gedankenrepo

8

Die akzeptierte Antwort:

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

funktioniert, entfernt jedoch mehrere, :wenn zu Beginn mehr als eine vorhanden ist.

$str = substr($str, 1);

entfernt jedes Zeichen von Anfang an.

Jedoch,

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

funktioniert perfekt.


6

Sie können die Funktion sbstr () verwenden

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

2

Trimmt das Vorkommen jedes Wortes in einem Array vom Anfang und Ende einer Zeichenfolge + Leerzeichen und optional zusätzliche Einzelzeichen gemäß normalem Trimmen ().

<?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

Der Code funktioniert gut für mich.

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

Vielleicht tragen Sie auch mit Antworten bei.


1
Dieser arbeitet nicht mit einer einzelnen Zeichenkette: wie "a"
bis

Sie haben Recht =) Glauben Sie also, dass eine mögliche Lösung darin besteht, zu testen, bevor es nur ein Zeichen enthält. Zum Beispiel: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Oder $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; weil die Idee ist, das letzte Zeichen zu entfernen, wenn Sie nur eines haben ...: P
Claudionor Oliveira

1

Verwenden Sie die Funktion mb_substr

    mb_substr("我abc", 1);

Nützlich, wenn das Zeichen ein Währungssymbol ist.
Raymie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.