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:'
Haim Evgi
quelle
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.

Mario
quelle
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 :)
alexn
quelle
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

Hayenn
quelle
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 :)
Tarun modi
quelle
11

Um das erste Zeichen der Zeichenfolge in PHP zu entfernen,

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

echo $new_string;
Generates: "bcdef"
Chandan Sharma
quelle
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
Gammerz
quelle
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.

rybo111
quelle
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.

Dan Bray
quelle
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);
Adeojo Emmanuel IMM
quelle
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"
?>
Ben
quelle
1

Der Code funktioniert gut für mich.

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

Vielleicht tragen Sie auch mit Antworten bei.

Claudionor Oliveira
quelle
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);
风声 猎猎
quelle
Nützlich, wenn das Zeichen ein Währungssymbol ist.
Raymie