PHP bietet mehrere effiziente Methoden, um festzustellen, ob eine Zeichenkette mit einer bestimmten Teilzeichenkette beginnt. Dieser Artikel untersucht drei gängige Ansätze: die Verwendung der Funktionen substr()
, strpos()
und strncmp()
. Jede Methode hat ihre Stärken und Schwächen und eignet sich daher für unterschiedliche Szenarien.
Inhaltsverzeichnis
- Verwendung von
substr()
zum Überprüfen auf eine anfängliche Teilzeichenkette - Verwendung von
strpos()
zum Überprüfen auf eine anfängliche Teilzeichenkette - Verwendung von
strncmp()
zum Überprüfen auf eine anfängliche Teilzeichenkette - Die richtige Methode auswählen
Verwendung von substr()
zum Überprüfen auf eine anfängliche Teilzeichenkette
Die Funktion substr()
extrahiert einen Teil einer Zeichenkette. Wir können dies verwenden, um zu überprüfen, ob der Anfang einer Zeichenkette mit unserer Zielteilzeichenkette übereinstimmt. Dieser Ansatz ist unkompliziert und leicht verständlich.
<?php
function startsWithSubstr(string $haystack, string $needle): bool {
return substr($haystack, 0, strlen($needle)) === $needle;
}
$string = "Dies ist ein Teststring.";
$substring = "Dies";
if (startsWithSubstr($string, $substring)) {
echo "'$string' beginnt mit '$substring'n";
} else {
echo "'$string' beginnt nicht mit '$substring'n";
}
$string2 = "Ein weiterer Teststring.";
$substring2 = "Test";
if (startsWithSubstr($string2, $substring2)) {
echo "'$string2' beginnt mit '$substring2'n";
} else {
echo "'$string2' beginnt nicht mit '$substring2'n";
}
?>
Dieser Code extrahiert den Teil von $haystack
mit der Länge von $needle
, beginnend bei Index 0. Anschließend wird ein strenger Vergleich (===
) durchgeführt, um sicherzustellen, dass sowohl Typ als auch Wert übereinstimmen. Diese Methode ist effizient für kürzere Teilzeichenketten.
Verwendung von strpos()
zum Überprüfen auf eine anfängliche Teilzeichenkette
Die Funktion strpos()
findet die Position des ersten Auftretens einer Teilzeichenkette. Wenn sich die Teilzeichenkette am Anfang befindet, ist ihre Position 0.
<?php
function startsWithPos(string $haystack, string $needle): bool {
//strpos gibt false zurück, wenn needle nicht gefunden wird, daher verwenden wir !== statt !=
return strpos($haystack, $needle) === 0;
}
$string = "Dies ist ein Teststring.";
$substring = "Dies";
if (startsWithPos($string, $substring)) {
echo "'$string' beginnt mit '$substring'n";
} else {
echo "'$string' beginnt nicht mit '$substring'n";
}
$string2 = "Ein weiterer Teststring.";
$substring2 = "Test";
if (startsWithPos($string2, $substring2)) {
echo "'$string2' beginnt mit '$substring2'n";
} else {
echo "'$string2' beginnt nicht mit '$substring2'n";
}
?>
Dies ist eine prägnante und häufig verwendete Methode. Ein strenger Vergleich (=== 0
) ist entscheidend, da strpos()
false
zurückgibt, wenn die Nadel nicht gefunden wird.
Verwendung von strncmp()
zum Überprüfen auf eine anfängliche Teilzeichenkette
Die Funktion strncmp()
vergleicht Teile von zwei Zeichenketten. Sie ist besonders nützlich für groß-/kleinschreibungssensitive Vergleiche oder wenn nur eine bestimmte Anzahl von Zeichen geprüft werden soll.
<?php
function startsWithStrncmp(string $haystack, string $needle): bool {
return strncmp($haystack, $needle, strlen($needle)) === 0;
}
$string = "Dies ist ein Teststring.";
$substring = "Dies";
if (startsWithStrncmp($string, $substring)) {
echo "'$string' beginnt mit '$substring'n";
} else {
echo "'$string' beginnt nicht mit '$substring'n";
}
$string2 = "Ein weiterer Teststring.";
$substring2 = "Test";
if (startsWithStrncmp($string2, $substring2)) {
echo "'$string2' beginnt mit '$substring2'n";
} else {
echo "'$string2' beginnt nicht mit '$substring2'n";
}
?>
strncmp()
vergleicht die ersten strlen($needle)
Zeichen von $haystack
mit $needle
. Ein Rückgabewert von 0 bedeutet, dass sie identisch sind. Diese Funktion ist effizient und bietet mehr Kontrolle.
Die richtige Methode auswählen
Für Einfachheit und Lesbarkeit bei kürzeren Teilzeichenketten ist substr()
eine gute Wahl. strpos()
bietet für die meisten Fälle eine prägnante und effiziente Lösung. strncmp()
bietet mehr Flexibilität, insbesondere bei groß-/kleinschreibungssensitivem Vergleich oder wenn der Vergleich auf eine bestimmte Anzahl von Zeichen beschränkt werden soll. Bei sehr großen Zeichenketten kann es einen geringfügigen Leistungsvorteil bieten, aber für die meisten gängigen Anwendungsfälle ist strpos()
in der Regel ausreichend.