129 Stimmen

Wie lässt sich am effizientesten prüfen, ob ein PHP-String mit einem anderen String endet?

Der PHP-Standardweg, um zu testen, ob ein String $str endet mit einer Teilzeichenkette $test ist:

$endsWith = substr( $str, -strlen( $test ) ) == $test

Ist dies der schnellste Weg?

0 Stimmen

0 Stimmen

PHP 8.0 führt eine neue Methode für diese Aufgabe ein str_end_with : stackoverflow.com/a/64160081/7082164

3 Stimmen

6voto

ericek111 Punkte 516

In PHP 8:

str_ends_with('haystack', 'stack'); // true
str_ends_with('haystack', 'K'); // false

und auch:

str_starts_with('haystack', 'hay'); // true

PHP RFC: Hinzufügen von str_starts_with(), str_ends_with() und verwandten Funktionen

5voto

Gumbo Punkte 617646

Eine andere Möglichkeit wäre die Verwendung der strrpos Funktion :

strrpos($str, $test) == strlen($str) - strlen($test)

Aber das ist nicht schneller.

3voto

Srinivasan.S Punkte 2935

Ich hoffe, dass die folgende Antwort effizient und einfach ist:

$content = "The main string to search";
$search = "search";
//For compare the begining string with case insensitive. 
if(stripos($content, $search) === 0) echo 'Yes';
else echo 'No';

//For compare the begining string with case sensitive. 
if(strpos($content, $search) === 0) echo 'Yes';
else echo 'No';

//For compare the ending string with case insensitive. 
if(stripos(strrev($content), strrev($search)) === 0) echo 'Yes';
else echo 'No';

//For compare the ending string with case sensitive. 
if(strpos(strrev($content), strrev($search)) === 0) echo 'Yes';
else echo 'No';

0 Stimmen

Meinen Sie nicht, dass große $string-Werte zu Speicherproblemen führen könnten, wenn sie umgekehrt werden sollten, Diese Ansätze mit strrev sehen für mich nicht gut aus, was die Effizienz angeht.

1voto

wloske Punkte 189

Ich weiß nicht, ob das schnell geht oder nicht, aber für einen Test mit nur einem Zeichen funktionieren auch diese:

(array_pop(str_split($string)) === $test) ? true : false;
($string[strlen($string)-1] === $test) ? true : false;
(strrev($string)[0] === $test) ? true : false;

0 Stimmen

Selbst wenn sie es tun: Glauben Sie nicht, dass große $string Werte könnten zu Speicherproblemen führen, wenn sie umgekehrt oder zuerst in ein Array aufgeteilt werden sollten? Diese Ansätze scheinen mir in Bezug auf die Effizienz nicht gut zu sein

1voto

Biskrem Muhammad Punkte 3180

Am einfachsten über einen regulären Ausdruck zu überprüfen

zum Beispiel um zu prüfen, ob es sich bei der angegebenen Mail um gmail handelt:

echo (preg_match("/@gmail\.com$/","example-email@gmail.com"))?'true':'false';

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X