Ich möchte das erste Wort einer Variablen aus einer Zeichenfolge extrahieren. Nehmen Sie zum Beispiel diese Eingabe:
<?php $myvalue = 'Test me more'; ?>
Die resultierende Ausgabe sollte sein Test
, was das erste Wort der Eingabe ist. Wie kann ich das machen?
s($str)->words()[0]
hilfreiche Informationen in dieser eigenständigen Bibliothek .Antworten:
Sie können die Explosionsfunktion wie folgt verwenden:
quelle
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
Parameter sollte 2 sein, da er das letzte Element enthalten muss, das den Rest der Zeichenfolge enthält. 1 würde nur die gleiche Zeichenfolge zurückgeben. Wenn kein großes Array erstellt würde, würde ich die Elliot-Version für einen Einzeiler verwenden.Es gibt eine Zeichenfolgenfunktion ( strtok ), mit der eine Zeichenfolge basierend auf einigen Trennzeichen in kleinere Zeichenfolgen ( Token ) aufgeteilt werden kann. Für die Zwecke dieses Threads kann das erste Wort (definiert als alles vor dem ersten Leerzeichen) von
Test me more
erhalten werden, indem die Zeichenfolge auf dem Leerzeichen markiert wird .Weitere Details und Beispiele finden Sie auf der strtok PHP-Handbuchseite .
quelle
strtok
ist eine seltsame und gefährliche Funktion, die einen globalen Staat hält. Von der Verwendung dieser Funktion sollte abgeraten werden.Wenn Sie PHP 5.3 haben
Beachten Sie, dass if in diesem Fall
$myvalue
eine Zeichenfolge mit einem Wortstrstr
nichts zurückgibt. Eine Lösung könnte darin bestehen, ein Leerzeichen an die Testzeichenfolge anzuhängen:Dadurch wird immer das erste Wort der Zeichenfolge zurückgegeben, auch wenn die Zeichenfolge nur ein Wort enthält
Die Alternative ist so etwas wie:
Oder mit explode, das so viele Antworten hat, dass ich nicht darauf hinweisen muss, wie es geht.
quelle
strstr
in PHP verfügbar, da4.3.0
es nicht vorher war5.3.0
, als der optionale Parameterbefore_needle
(den Sie in diesem Beispiel verwenden) hinzugefügt wurde. Nur ein Hinweis, weil ich verwirrt war, warum Sie sagen, dass dieses Beispiel benötigt5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Du könntest es tun
quelle
Obwohl es etwas spät ist, hat PHP eine bessere Lösung dafür:
quelle
Ähnlich wie bei einer akzeptierten Antwort mit einem Schritt weniger:
quelle
Nur für den Fall, dass Sie nicht sicher sind, ob die Zeichenfolge mit einem Wort beginnt ...
quelle
trim($input)
würde in diesem Fall ausreichen: PVerwenden Sie einfach explode, um jedes Wort der Eingabe abzurufen und das erste Element des resultierenden Arrays auszugeben.
quelle
Mit der Split-Funktion können Sie auch das erste Wort aus der Zeichenfolge abrufen.
quelle
strtok
ist schneller alsextract
oderpreg_*
funktioniert.quelle
quelle
persönlich
strsplit
/explode
/strtok
nicht Wortgrenzen unterstützen, so einen accute Split Verwendung regulären Ausdruck zu bekommen mit der\w
Dies würde Wörter mit Grenzen bis zu einer Grenze von 1 teilen.
quelle
Grüße, Ciul
quelle
quelle
Sie können dies mit der PHP-Zeichenfolgenfunktion substr tun, ohne die Zeichenfolge in ein Array umzuwandeln.
// Ausgabe S.
quelle
quelle
Funktion, die die Zeichenfolge in zwei Teile unterteilt, das erste Wort und die verbleibende Zeichenfolge.
Rückgabewert: Das Array wird jeweils eingegeben
first
undremaining
eingegeben$return
. Die erste Überprüfungstrpos( $title," ") !== false
ist obligatorisch, wenn die Zeichenfolge nur ein Wort und kein Leerzeichen enthält.quelle
$ first_word = str_word_count (1) [0]
Funktioniert nicht mit Sonderzeichen und führt zu falschem Verhalten, wenn Sonderzeichen verwendet werden. Es ist nicht UTF-8-freundlich.
Für weitere Informationen überprüfen Sie, ob PHP str_word_count () Multibyte sicher ist.
quelle
Da Sie nicht mit Strich nach Groß- oder Kleinbuchstaben suchen können, funktioniert dies perfekt, um das erste Wort zu überprüfen.
quelle
Ihre Frage könnte neu formuliert werden als "Ersetzen Sie in der Zeichenfolge das erste Leerzeichen und alles, was folgt, durch nichts". Dies kann also mit einem einfachen regulären Ausdruck erreicht werden:
Ich habe ltrim () aus Sicherheitsgründen optional aufgerufen: Diese Funktion entfernt Leerzeichen am Anfang der Zeichenfolge.
quelle
Alle Antworten hier verwenden einen Ansatz, bei dem der Prozessor die gesamte Zeichenfolge durchsuchen muss, auch wenn das erste Wort gefunden wird! Für große Saiten wird dies nicht empfohlen. Dieser Ansatz ist optimal:
quelle
Wenn Sie wissen wollen , wie schnell jeder dieser jeweiligen Funktionen ist, lief ich einige grobe in PHP Benchmarking 7,3 auf der sechs meisten Antworten hier gewählt (
strpos
mitsubstr
,explode
mitcurrent
,strstr
,explode
mittrim
,str_word_count
undstrtok
) mit 1.000.000 Iterationen jeweils ihre Geschwindigkeiten zu vergleichen.Hier sind die unterschiedlichen Ergebnisse von 2 aufeinander folgenden Läufen:
Und die Ergebnisse nach Umkehrung der Reihenfolge der Funktionen:
Schlussfolgerung Es stellt sich heraus, dass die Geschwindigkeit zwischen diesen Funktionen stark variiert und zwischen den Testläufen nicht so konstant ist, wie Sie es vielleicht erwarten. Nach diesen schnellen und schmutzigen Tests erledigt jede der sechs ausgewählten Funktionen die Arbeit in angemessener Zeit. Es gibt Störungen, einschließlich anderer laufender Prozesse, die die Ausführungszeiten beeinträchtigen. Verwenden Sie also einfach die Funktion, die für Sie als Programmierer am praktischsten und lesbarsten ist. Für das größere Programmierbild siehe Donald Knuths Literate Programming .
quelle