Standardowy sposób PHP na sprawdzenie, czy ciąg $str
kończy się podłańcuchem, $test
to:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Czy to najszybszy sposób?
php
string
performance
Jason Cohen
źródło
źródło
s($str)->endsWith($test)
lubs($str)->endsWithIgnoreCase($test)
pomóc, jak znajdziesz w tej niezależnej bibliotece .Odpowiedzi:
To, co powiedział Assaf, jest poprawne. W PHP jest wbudowana funkcja, która dokładnie to robi.
Jeśli
$test
jest dłuższy niż$str
PHP, wyświetli ostrzeżenie, więc musisz najpierw to sprawdzić.źródło
Ta metoda jest trochę droższa w pamięci, ale jest szybsza:
Najlepiej, gdy wiesz dokładnie, czym jest igła, więc możesz ją na stałe odwrócić. Jeśli programowo odwrócisz igłę, stanie się wolniejsza niż poprzednia metoda.
źródło
stripos
w najgorszym przypadku powtórzy cały sznurek, podczas gdysubstr_compare
porównuje co najwyżej długość igły. Tak,substr_compare
wymaga obliczenia długości stogu siana (i znacznie mniejszej igły), ale ta metoda wymaga tego i skopiowania go w całości i ewentualnie zamiany całości na małe litery do rozruchu.substr_compare()
działa dobrze.Ujemne przesunięcie „zaczyna liczyć od końca łańcucha”.
źródło
Oto prosty sposób sprawdzenia, czy jeden ciąg kończy się drugim, poprzez podanie
strpos
przesunięcia w miejscu, w którym powinien się znaleźć ciąg:Proste i myślę, że to zadziała w PHP 4.
źródło
To zależy od tego, na jakiej wydajności Ci zależy.
Twoja wersja zajmuje więcej pamięci z powodu dodatkowej kopii z użycia substr.
Alternatywna wersja mogłaby przeszukiwać oryginalny ciąg pod kątem ostatniego wystąpienia podciągu bez wykonywania kopii, ale prawdopodobnie byłaby wolniejsza z powodu większej liczby testów.
Prawdopodobnie najbardziej wydajnym sposobem jest wykonanie pętli znak po znaku od pozycji -sterlen (test) do końca łańcucha i porównanie. To minimalna liczba porównań, na które możesz liczyć, i nie ma prawie żadnej dodatkowej pamięci.
źródło
Innym sposobem byłoby użycie
strrpos
funkcji :Ale to nie jest szybsze.
źródło
Mam nadzieję, że poniższa odpowiedź okaże się skuteczna i jednocześnie prosta:
źródło
Nie wiem, czy jest to szybkie, czy nie, ale w przypadku testu jednej postaci te również działają:
źródło
najłatwiej to sprawdzić za pomocą wyrażenia regularnego
na przykład, aby sprawdzić, czy podana poczta to gmail:
źródło
Myślę, że funkcje odwrotne, takie jak strrchr (), pomogłyby w najszybszym dopasowaniu końca ciągu.
źródło
To jest czysty PHP, bez wywoływania funkcji zewnętrznych, z wyjątkiem strlen .
źródło
dla igły jednoznakowej:
źródło