Ich versuche einen Teilstring zu extrahieren. Ich brauche Hilfe dabei in PHP.
Hier sind einige Beispielzeichenfolgen, mit denen ich arbeite, und die Ergebnisse, die ich benötige:
home/cat1/subcat2 => home
test/cat2 => test
startpage => startpage
Ich möchte die Zeichenfolge bis zur ersten erhalten /
, aber wenn keine /
vorhanden ist, holen Sie sich die gesamte Zeichenfolge.
Ich habe es versucht,
substr($mystring, 0, strpos($mystring, '/'))
Ich denke, es heißt - holen Sie sich die Position von /
und dann den Teilstring von Position 0 zu dieser Position.
Ich weiß nicht, wie ich mit dem Fall umgehen soll, in dem es keinen gibt /
, ohne die Aussage zu groß zu machen.
Gibt es eine Möglichkeit, diesen Fall auch zu behandeln, ohne die PHP-Anweisung zu komplex zu machen?
s($str)->beforeFirst('/')
hilfreiche Informationen in dieser eigenständigen Bibliothek .Antworten:
Verwenden
explode()
In diesem Fall verwende ich den
limit
Parameter,explode
damit PHP den String nicht mehr scannt, als benötigt wird.quelle
$arr = explode('/',$mystring,2); echo $arr[0];
. Ich kann den ersten String in einer Anweisung selbst nicht abrufen -echo explode('/',$mystring,2)[0];
. Da explode ein Array zurückgibt, sollte ich es richtig machen können? Aber ich bekomme einen Fehler. Irgendwelche Vorschläge?explode() + [0]
ist eine langatmige Art zu schreibenstrtok($string, "/")
Die effizienteste Lösung ist die
strtok
Funktion:Beispielsweise:
und
quelle
current-explode
Lösung. (Nicht, dass ich es so oft benutze, dass es wichtig ist.)explode
Lösungen.strtok
ISfirst/second
kehrtfirst
aber/second
zurückkehren ,second
anstatt einen leeren String.quelle
Was ist damit:
Fügen Sie einfach ein '/' am Ende von mystring hinzu, damit Sie sicher sein können, dass es mindestens eines gibt;)
quelle
Einzeilige Version der akzeptierten Antwort:
Sollte in PHP 5.4+ funktionieren
quelle
Dies ist wahrscheinlich das kürzeste Beispiel, das mir in den Sinn gekommen ist:
1)
list()
weist automatisch eine Zeichenfolge zu, bis ein"/"
Trennzeichen gefunden wird.2) Wenn
"/"
kein Trennzeichen gefunden wird, wird die gesamte Zeichenfolge zugewiesen... und wenn Sie wirklich von der Leistung besessen sind, können Sie zusätzliche Parameter zum Explodieren hinzufügen, die
explode("/", $mystring, 2)
das Maximum der zurückgegebenen Elemente begrenzen.quelle
strtok()
ist unsicher.strtok()
?strtok()
unsicher?Besser spät als nie. PHP hat dafür eine vordefinierte Funktion. Hier ist dieser gute Weg.
Wenn Sie das Teil vor dem Match erhalten möchten, setzen Sie einfach before_needle (3. Parameter) auf
true
http://php.net/manual/en/function.strstr.phpquelle
strstr
das etwas schneller ist alsstrtok
. Ich werde mit dem ersteren gehen.Die Funktion strstr () in PHP 5.3 sollte diesen Job ausführen. Der dritte Parameter sollte jedoch auf true gesetzt werden.
Wenn Sie jedoch 5.3 nicht verwenden, sollte die folgende Funktion genau funktionieren:
Ich habe es zwar nicht getestet, aber das sollte gut funktionieren. Und es ist auch ziemlich schnell
quelle
strstr()
, aber beachten Sie, dass es zurückgegeben wird,false
wenn der String nicht enthält. Daher passen$needle
dieexplode()
obigen Lösungen in diesem Fall besser.Sie können eine Hilfsfunktion erstellen, um dies zu erledigen:
Hier ist ein Anwendungsfall:
quelle
Sie können versuchen, einen regulären Ausdruck wie folgt zu verwenden:
Manchmal sind Regex jedoch langsamer. Wenn also die Leistung ein Problem darstellt, stellen Sie sicher, dass Sie dies richtig bewerten und eine andere Alternative mit Teilzeichenfolgen verwenden, wenn dies für Sie besser geeignet ist.
quelle
explode
, wäre es interessant zu sehen, was schneller ist.Die Verwendung von
current
onexplode
würde den Prozess vereinfachen.quelle
quelle
Sie können auch diese einzeilige Lösung verwenden
quelle
Ich denke das sollte funktionieren?
quelle
warum nicht verwenden:
ODER:
quelle