Entfernen Sie das abschließende Trennzeichen aus einer Zeichenfolge mit Trennzeichen

Lesezeit: 6 Minuten

Benutzer-Avatar
IM-JM

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

Ich habe eine Zeichenfolge wie

a,b,c,d,e,

Ich möchte das letzte ‘,’ entfernen und die verbleibende Zeichenfolge zurückerhalten:

OUTPUT: a,b,c,d,e

Was ist der schnellste Weg, dies zu tun?

  • Wenn diese Zeichenfolge durch eine Schleife verkettet wird, können Sie “implode” verwenden, sie wird ohne letztes Komma verkettet

    – Tufan Barış Yıldırım

    8. April 2011 um 9:24 Uhr

  • @Tufan Barış Yıldırım: Die Zeichenfolgenverkettung ist nicht in der Schleife

    – IM-JM

    8. April 2011 um 9:34 Uhr

  • Bitte machen Sie sich keine Gedanken über “am schnellsten”, ohne vorher eine Messung durchgeführt zu haben, auf die es ankommt. Anstatt sich Gedanken über den schnellsten zu machen, denken Sie darüber nach, welcher Weg am klarsten ist.

    – Andy Lester

    18. September 2013 um 16:55 Uhr

  • Dies sollte nicht als Duplikat markiert werden, da die andere Frage besagt, dass Sie wissen, was das letzte Zeichen ist (“ein Punkt”).

    – Fruchtpause

    5. August 2014 um 16:04 Uhr

  • @FruitBreak Nein, es ist korrekt markiert, wie Sie sehen können, an welcher Antwort IM-JM akzeptiert hat. Es ist wieder trim(). Er meint also “Wie entferne ich die letzten bestimmten Zeichen aus einer Zeichenfolge?” und nicht “der Letzte”. Alle anderen Antworten sind damit “falsch”. Die einzige falsche doppelte Markierung hat diese Frage.

    – mgutt

    2. April 2015 um 9:53 Uhr


Entgegen der gestellten Frage, rtrim() wird Entfernen irgendeine Nummer von Zeichen, die im zweiten Argument aufgeführt sind, vom Ende der Zeichenfolge. Falls 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, also musste ich ändern

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

und jetzt würde es alle Kommas und Leerzeichen vom Ende der Zeichenfolge entfernen und zurückkehren a, b, c, d, e entweder von a, b, c, d, e,, a, b, c, d, e,,,, a, b, c, d, e, oder a, b, c, d, e , ,, , ,

Aber falls es mehrere Kommas geben könnte, müssen Sie sie entfernen nur die letztedann rtrim() sollte überhaupt nicht verwendet werden – siehe andere Antworten für die Lösung, die die Frage direkt beantwortet.

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

  • Wie? Können Sie eine Art Beispiel geben

    – IM-JM

    8. April 2011 um 9:17 Uhr

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

    anon

    8. April 2011 um 9:18 Uhr


  • wirklich toll!, zumindest für mich … ich bin zu auf der suche danach … und habe es hier gefunden … danke +1

    – Mohammed Sufian

    24. Januar 2014 um 21:45 Uhr

  • Beachten Sie, dass dies die im Titel angegebene Frage nicht beantwortet.

    – Dave Walley

    11. April 2014 um 16:39 Uhr

  • Beachten Sie, dass dies eine gefährliche Methode ist, um das zusätzliche Komma am Ende einer CSV-Zeichenfolge zu entfernen (ein recht häufiges Problem beim Verketten von Werten in einer Schleife). Dies würde sich in der Tat drehen A;B;C;D; zu A;B;C;Dsondern wird sich auch verwandeln A;B;;; zu A;B. Oft möchte man die Trennzeichen zwischen leeren Werten beibehalten, da ein CSV-Parser die Anzahl der Felder möglicherweise aus dem String selbst ermitteln muss.

    – etuardu

    13. Januar 2015 um 19:51 Uhr

Benutzer-Avatar
Nicola Peluchetti

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.

Falls das letzte Zeichen ein Multibyte sein könnte, dann mb_substr() sollte stattdessen verwendet werden.

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

    – Dienstleister2

    15. Oktober 2013 um 8:24 Uhr


  • Das hat bei mir sehr gut funktioniert, sehr tolle Methode, hatte keine Ahnung, dass man dort eine negative Zahl verwenden und bei 0 beginnen könnte. Ich stimme dem obigen Kommentar zu, das ist weitaus besser als rtrim, ich hatte ein ähnliches Problem, bei dem ich es nicht getan habe möchte die letzten Zeichen vor einem Wort aus einem SQL-String am ENDE des Strings entfernen, nur wie “AND”, also habe ich dies mit substr(“sqlstatement”, 0, -7) verwendet; um das letzte AND in der Folge der WHERE AND-Klauseln zu entfernen, die ich geschrieben habe. Lief wie am Schnürchen :).

    – Josef Astrahan

    8. November 2013 um 7:49 Uhr


  • Dies sollte die akzeptierte Antwort sein – es entfernt das letzte Zeichen (nicht nur ‘,’), wie ursprünglich gefragt wurde.

    – Dave Walley

    11. April 2014 um 16:41 Uhr

  • trim und rtrim Entfernen Sie nicht das letzte Zeichen in einer Zeichenfolge. Obwohl das manchmal alles ist, was sie tun, entfernen sie oft viele Zeichen aus der Zeichenfolge. z.B rtrim('Assess','s') gibt dir ‘Asse’, nicht ‘Asses’. Deshalb ist diese Antwort besser als die akzeptierte Antwort.

    – Buttle Butkus

    20. März 2015 um 4:52 Uhr

  • Der Code ist fehlerhaft, verwenden Sie stattdessen diesen: $substring = substr($string, 0, strlen($string)-1);

    – Unterbelichtet

    16. Januar 2021 um 16:35 Uhr

Benutzer-Avatar
Bart

Eine Alternative zu substr ist als Funktion:

substr_replace($string, "", -1)

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

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

  • Das Problem mit “so schnell, es spielt keine Rolle” ist, dass es sich möglicherweise in einer Schleife befindet. Stellen Sie sich vor, dieser Code wird für jeden einzelnen Buchstaben in einem langen Text 50 Mal ausgeführt. Plötzlich zählt jede noch so kleine Leistung.

    – Bis

    7. Juni 2017 um 14:11 Uhr

  • @Till Ich bin mir nicht sicher, ob es so funktioniert, ich habe die Quelle nicht überprüft, aber ich gehe davon aus substr_replace($str, $replacement, $start[, $length]) Die letzten paar Parameter begrenzen die Buchstaben, die “chirurgisch eingegriffen” werden. Dh substring analysiert/ersetzt nur die Zeichen des Teilstrings (in diesem Fall geleert). Danach wird der Rest der unveränderten Zeichenfolge verkettet.

    – CPHPython

    9. August 2018 um 10:03 Uhr

Benutzer-Avatar
Bas van Ommen

Sie können verwenden

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

Sehen Substr in der PHP-Dokumentation. Es gibt einen Teil einer Zeichenfolge zurück.

Benutzer-Avatar
jxwd

Verwenden Sie das Ende des regulären Ausdrucks des Zeichenfolgenankers “$”.

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

  • Überraschenderweise mag ich dieses, weil es akribisch korrekt ist: Es entfernt nur ein Komma, das nur das letzte Zeichen ist, und nur, wenn es vorhanden ist

    – Ihr gesunder Menschenverstand

    20. Juni um 15:15 Uhr


Benutzer-Avatar
Ihr gesunder Menschenverstand

“Das am schnellsten bester Code ist der Code, der nicht existiert”.

Apropos Grenzfälle, es gibt ein ziemlich häufiges Problem mit dem abschließenden Komma, das nach der Schleife erscheint, wie z

$str="";
foreach ($array as $value) {
    $str .= "$value,";
}

was meiner Meinung nach auch in der Ausgangsfrage der Fall sein könnte. In diesem Fall wäre die schnellste Methode definitiv nicht hinzuzufügen das abschließende Komma überhaupt:

$str="";
foreach ($array as $value) {
    $str .= $str ? "," : "";
    $str .= $value;
}

Hier prüfen wir, ob $str bereits einen Wert hat, und wenn ja, fügen wir ein Komma hinzu Vor das nächste Element, sodass das Ergebnis keine zusätzlichen Kommas enthält.

  • Überraschenderweise mag ich dieses, weil es akribisch korrekt ist: Es entfernt nur ein Komma, das nur das letzte Zeichen ist, und nur, wenn es vorhanden ist

    – Ihr gesunder Menschenverstand

    20. Juni um 15:15 Uhr


1362670cookie-checkEntfernen Sie das abschließende Trennzeichen aus einer Zeichenfolge mit Trennzeichen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy