831 Stimmen

Nachfolgendes Begrenzungszeichen aus einer begrenzten Zeichenkette entfernen

Was ist der schnellste Weg, um das letzte Zeichen aus einer Zeichenkette zu entfernen?

Ich habe eine Zeichenfolge wie

a,b,c,d,e,

Ich möchte das letzte ',' entfernen und die verbleibende Zeichenfolge zurückbekommen:

OUTPUT: a,b,c,d,e

Was ist der schnellste Weg, dies zu tun?

39 Stimmen

Wenn diese Zeichenkette durch eine Schleife zusammengefügt wird, können Sie "implode" verwenden, sie wird ohne letztes Komma zusammengefügt

1 Stimmen

@Tufan Bar Yldrm: String-Verkettung ist nicht in Schleife

9 Stimmen

Machen Sie sich bitte keine Gedanken über "am schnellsten", ohne vorher eine Messung durchgeführt zu haben, die zeigt, dass es darauf ankommt. Machen Sie sich keine Gedanken über den schnellsten Weg, sondern darüber, welcher Weg am klarsten ist.

1331voto

Im Gegensatz zu der gestellten Frage, rtrim() wird entfernt beliebige Nummer von Zeichen, die im zweiten Argument aufgeführt sind, vom Ende der Zeichenkette. Für den Fall, dass Sie nur ein einzelnes Komma erwarten, würde der folgende Code ausreichen:

$newarraynama = rtrim($arraynama, ",");

Aber in meinem Fall hatte ich 2 Zeichen, ein Komma und ein Leerzeichen, so dass ich zu

$newarraynama = rtrim($arraynama, " ,");

und würde nun alle Kommas und Leerzeichen am Ende der Zeichenkette entfernen und Folgendes zurückgeben a, b, c, d, e entweder von a, b, c, d, e, , a, b, c, d, e,,, , a, b, c, d, e, ou a, b, c, d, e , ,, , ,

Falls jedoch mehrere Kommas vorhanden sein könnten, müssen Sie die nur die letzte entonces rtrim() sollte überhaupt nicht verwendet werden - siehe andere Antworten für die Lösung, die die Frage direkt beantwortet.

Allerdings, rtrim() könnte eine gute Wahl sein, wenn Sie nicht wissen, ob das zusätzliche Zeichen vorhanden sein könnte oder nicht. Anders als substr -basierten Lösungen wird es zurückgeben a, b, c, d, e de a, b, c, d, e

5 Stimmen

Wie? Können Sie eine Art Beispiel nennen

4 Stimmen

@I-M Einfach ersetzen $string durch Ihre Daten, und geben Sie das Ganze wieder: echo rtrim("a,b,c,d,e,", ",");

1 Stimmen

Wirklich toll!, zumindest für mich... ich bin auch auf der Suche nach diesem..und fand es hier... danke +1

1112voto

Nicola Peluchetti Punkte 74314

Sie können verwenden substr :

echo substr('a,b,c,d,e,', 0, -1);
# => 'a,b,c,d,e'

Dadurch wird die Zeichenfolge vom Anfang bis einschließlich des vorletzten Zeichens isoliert. Mit anderen Worten, es isoliert die gesamte Zeichenfolge mit Ausnahme des letzten Zeichens.

Wenn das letzte Zeichen ein Multi-Byte-Zeichen sein könnte, dann mb_substr() sollte stattdessen verwendet werden.

33 Stimmen

Das ist der gute Weg. Ich wollte das letzte Komma aus einer Zeichenkette entfernen wie: "a,b,c,d," und dies ist die richtige Lösung, denn wenn Sie rtrim() verwenden, werden die letzten zwei Kommas entfernt.

0 Stimmen

Dies funktionierte sehr gut für mich, sehr große Methode, hatte keine Ahnung, Sie könnten eine negative Zahl dort verwenden und von 0 beginnen. Ich stimme mit dem obigen Kommentar, dies ist weit besser als rtrim, ich hatte ein ähnliches Problem, wo ich wollte nicht die letzten Zeichen zu entfernen, aber ein Wort aus einer SQL-Zeichenfolge am ENDE der Zeichenfolge nur wie " AND ", so dass ich dies mit substr("sqlstatement", 0, -7); verwendet, um das letzte AND in der Folge von WHERE AND-Klauseln, die ich schrieb zu entfernen. Das hat wunderbar funktioniert :).

37 Stimmen

Dies sollte die akzeptierte Antwort sein - sie entfernt das letzte Zeichen (nicht nur ','), wie ursprünglich gefragt wurde.

120voto

bart Punkte 7384

Eine Alternative zu substr ist die folgende, als Funktion:

substr_replace($string, "", -1)

Ist es das schnellste? Ich weiß es nicht, aber ich würde wetten, dass diese Alternativen alle so schnell sind, dass es spielt einfach keine Rolle .

Beachten Sie, dass diese Funktion nicht multibyte-sicher ist und das unerwünschte Ergebnis liefert, wenn das letzte Zeichen zufällig ein Multibyte-Zeichen ist.

4 Stimmen

Das Problem mit "so schnell, dass es keine Rolle spielt" ist, dass es sich um eine Schleife handeln kann. Stellen Sie sich vor, dieser Code wird 50 Mal für jeden einzelnen Buchstaben in einem langen Text ausgeführt. Plötzlich zählt jedes kleine bisschen Leistung.

1 Stimmen

@Till Ich bin nicht sicher, ob es so funktioniert, ich habe die Quelle nicht überprüft, aber ich nehme an, dass substr_replace($str, $replacement, $start[, $length]) Die letzten beiden Parameter schränken die Buchstaben ein, die "chirurgisch bearbeitet" werden. D.h. substr inging analysiert/ersetzt nur die Zeichen der Teilzeichenkette (in diesem Fall "leer"). Danach wird der Rest der unveränderten Zeichenfolge verkettet.

18voto

Bas van Ommen Punkte 1183

Sie können verwenden

substr(string $string, int $start, int[optional] $length=null);

Voir Teilbereich in der PHP-Dokumentation. Sie gibt einen Teil eines Strings zurück.

1 Stimmen

Entschuldigung, aber war es nicht die gleiche Antwort, die @ashleedawg gegeben hat?

0 Stimmen

@SalustianoMuniz, kein Problem denke ich. Die Zeitspanne zwischen den Antworten ist zu kurz.

5voto

jxwd Punkte 99

Verwendung des regulären Ausdrucks "$" am Ende der Zeichenkette

$string = preg_replace("/,$/", '', $string);

0 Stimmen

Überraschenderweise mag ich diese Version, weil sie sehr korrekt ist: Sie entfernt nur ein Komma, das nur das letzte Zeichen ist, und nur, wenn es vorhanden ist

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X