Erhalten Sie die erste Zeile einer Zeichenfolge in PHP
Lesezeit: 4 Minuten
kinokijuf
In PHP 5.3 gibt es eine nette funktion das scheint zu tun, was ich will:
strstr(input,"\n",true)
Leider läuft auf dem Server PHP 5.2.17 und der optionale dritte Parameter von strstr ist nicht verfügbar. Gibt es eine Möglichkeit, dies in früheren Versionen in einer Zeile zu erreichen?
Vielleicht möchten Sie doppelte Anführungszeichen verwenden \n. Als ich es beim Erstellen von E-Mail-Inhalten in einfachen Anführungszeichen hatte, war die \n kam nur als normales Zeichen anstelle des Zeilenumbruchzeichens heraus.
– Svis
1. Februar 2012 um 14:50 Uhr
warum zum one line Beschränkung ?
– Misterjinx
1. Februar 2012 um 14:51 Uhr
Ihr gesunder Menschenverstand
Für die relativ kurzen Texte, bei denen Zeilen entweder durch ein (“\n”) oder zwei (“\r\n”) Zeichen getrennt werden könnten, könnte der Einzeiler wie folgt aussehen
$line = preg_split('#\r?\n#', $input, 2)[0];
für jede Sequenz vor dem ersten Zeilenvorschub, auch wenn es sich um eine leere Zeichenfolge handelt,
Bei großen Texten kann es jedoch zu Speicherproblemen kommen, also in diesem Fall strtok unten erwähnt oder a substr-basierte Lösung, die in den anderen Antworten vorgestellt wird, sollte bevorzugt werden.
Als diese Antwort vor fast einem Jahrzehnt zum ersten Mal geschrieben wurde, wies sie einige subtile Nuancen auf
Es war zu lokalisiert, nach dem Opening Post mit der Annahme, dass das Zeilentrennzeichen immer ein einzelnes “\n”-Zeichen ist, was nicht immer der Fall ist. Verwenden PHP_EOL ist nicht die Lösung, da wir mit externen Daten umgehen können, die nicht von den lokalen Systemeinstellungen betroffen sind
Es wurde angenommen, dass wir die erste nicht leere Zeichenfolge benötigen
Es gab auch keine Möglichkeit, es zu benutzen explode() oder preg_split() in einer Zeile, daher ein Trick mit strtok() wurde vorgeschlagen. Doch kurz darauf, dank der Einheitliche Variablensyntaxvorgeschlagen von Nikita Popov, wird es möglich, eine dieser Funktionen in einem ordentlichen Einzeiler zu verwenden
Da diese Frage jedoch an Popularität gewonnen hat, ist es besser, alle möglichen Grenzfälle in der Antwort abzudecken. Aber aus historischen Gründen hier die ursprüngliche Lösung:
$str = strtok($input, "\n");
Dadurch wird die erste nicht leere Zeile aus dem Text im Unix-Format zurückgegeben.
Da die Zeilentrennzeichen jedoch unterschiedlich sein könnten und das Verhalten von strtok() ist nicht so gerade, da “Trennzeichen am Anfang oder Ende der Zeichenfolge ignoriert werden”, wie es in der Manpage für die ursprüngliche Funktion strtok() in C heißt, würde ich jetzt raten, diese Funktion mit Vorsicht zu verwenden.
Ich würde nicht sagen, dass es am schnellsten ist (und ich würde mich überhaupt nicht mit Geschwindigkeitsvergleichen beschäftigen), aber es ist anscheinend so kürzeste
– Ihr gesunder Menschenverstand
1. Februar 2012 um 15:22 Uhr
Programmiere PHP seit über einem Jahrzehnt und habe diese Funktion noch nie gesehen 😀 +1
– Schmeck
26. Januar 2015 um 18:25 Uhr
Dies schließt das neue Zeilenzeichen ein. So $str = rtrim(strtok($input, "\n")); würde es perfekt machen.
– Armin
13. März 2017 um 20:07 Uhr
wird zuerst zurückkehren nicht leer Linie
– Umgebungshack
8. Juni 2017 um 23:58 Uhr
Die Verwendung von PHP_EOL vermeidet UNIX/Windows-Verstrickungen.
Warum verwenden Sie in diesem Beispiel Zeichenfolgenschlüssel? Sollte es sein $lines[0]?
– trejder
9. April 2014 um 13:45 Uhr
Hinweis: Wenn Sie nur die erste Zeile benötigen, ist dies ineffizient. Bsp wenn $string hundert Megabyte groß ist und die erste Zeile nur einige Byte groß ist, verschwendet diese Lösung hundert Megabyte Speicher und Ihr Skript wird möglicherweise sogar beendet, wenn Sie die Speichergrenze erreichen.
– Christoph K.
2. August 2017 um 15:56 Uhr
current(explode("\n", $string)); verkürzt dies und löst das Problem der Zwischenvariablen und der Speicherverschwendung.
Erleichtert das Abrufen der obersten Zeile und des zurückgelassenen Inhalts, wenn Sie den Vorgang wiederholen möchten. Andernfalls verwenden Sie substr wie vorgeschlagen.
$firstline enthält jetzt die erste Zeile von Text oder eine leere Zeichenfolge, wenn keine Umbruchsymbole gefunden werden (oder das Umbruchsymbol ein erstes Symbol im Text ist).
13108600cookie-checkErhalten Sie die erste Zeile einer Zeichenfolge in PHPyes
Vielleicht möchten Sie doppelte Anführungszeichen verwenden
\n
. Als ich es beim Erstellen von E-Mail-Inhalten in einfachen Anführungszeichen hatte, war die\n
kam nur als normales Zeichen anstelle des Zeilenumbruchzeichens heraus.– Svis
1. Februar 2012 um 14:50 Uhr
warum zum
one line
Beschränkung ?– Misterjinx
1. Februar 2012 um 14:51 Uhr