Die Standard-PHP-Methode zum Testen, ob ein String $str
mit einem Teilstring endet, $test
ist:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Ist das der schnellste Weg?
php
string
performance
Jason Cohen
quelle
quelle
s($str)->endsWith($test)
oders($str)->endsWithIgnoreCase($test)
hilfreich, wie in dieser eigenständigen Bibliothek gefunden .Antworten:
Was Assaf gesagt hat, ist richtig. In PHP ist eine Funktion integriert, um genau das zu tun.
Wenn
$test
es länger als$str
PHP ist, wird eine Warnung ausgegeben, daher müssen Sie dies zuerst überprüfen.quelle
Diese Methode ist ein bisschen speicherintensiver, aber schneller:
Dies ist am besten, wenn Sie genau wissen, was die Nadel ist, damit Sie sie umgekehrt hart codieren können. Wenn Sie die Nadel programmgesteuert umkehren, wird sie langsamer als die vorherige Methode.
quelle
stripos
wird im schlimmsten Fall die gesamte Schnur iteriert, währendsubstr_compare
höchstens die Länge der Nadel verglichen wird. Ja,substr_compare
erfordert die Berechnung der Länge des Heuhaufens (und der viel kleineren Nadel), aber diese Methode erfordert dies und das vollständige Kopieren und möglicherweise das Konvertieren des gesamten Objekts in Kleinbuchstaben zum Booten.substr_compare()
funktioniert.Negativer Offset "beginnt am Ende der Zeichenfolge zu zählen".
quelle
Hier ist eine einfache Möglichkeit, um zu überprüfen, ob eine Zeichenfolge mit einer anderen endet, indem Sie
strpos
einen Versatz genau dort angeben, wo die Zeichenfolge gefunden werden soll:Einfach, und ich denke, das wird in PHP 4 funktionieren.
quelle
Es hängt davon ab, welche Art von Effizienz Sie interessiert.
Ihre Version benötigt aufgrund der zusätzlichen Kopie aus der Verwendung von substr mehr Speicher.
Eine alternative Version durchsucht möglicherweise die ursprüngliche Zeichenfolge nach dem letzten Vorkommen des Teilstrings, ohne eine Kopie zu erstellen, ist jedoch aufgrund weiterer Tests wahrscheinlich langsamer.
Der wahrscheinlich effizienteste Weg ist es, eine Schleife von Zeichen zu Zeichen von der Position -sterlen (Test) bis zum Ende des Strings durchzuführen und zu vergleichen. Das ist die minimale Anzahl von Vergleichen, auf die Sie hoffen können, und es wird kaum zusätzlicher Speicher verwendet.
quelle
Eine andere Möglichkeit wäre, die
strrpos
Funktion zu verwenden :Das geht aber nicht schneller.
quelle
Ich hoffe, dass die folgende Antwort effizient und auch einfach sein kann:
quelle
Ich weiß nicht, ob das schnell geht oder nicht, aber für einen einzelnen Zeichentest funktionieren auch diese:
quelle
einfachste Möglichkeit, dies über reguläre Ausdrücke zu überprüfen
Um beispielsweise zu überprüfen, ob es sich bei der angegebenen E-Mail um Google Mail handelt:
quelle
Ich denke, die umgekehrten Funktionen wie strrchr () würden Ihnen helfen, das Ende des Strings am schnellsten zu finden.
quelle
Dies ist reines PHP, ohne externe Funktionen aufzurufen, außer strlen .
quelle
für Single-Char-Nadel:
quelle