(PHP 5, PHP 7, PHP 8)
stripos — Findet das erste Vorkommen eines Teilstrings in einem String, unabhängig von Groß- und Kleinschreibung
Sucht die numerische Position des ersten Vorkommens von
needle innerhalb des Strings
haystack.
Im Gegensatz zu strpos() ist stripos() unabhängig von Groß- und Kleinschreibung.
haystackDie Zeichenkette, in der gesucht werden soll.
needleDie Zeichenkette, nach der gesucht werden soll.
Wenn der Parameter needle keine Zeichenkette ist,
wird er vor PHP 8.0.0 in eine Ganzzahl umgewandelt und als ordinaler Wert
eines Zeichens betrachtet. Dieses Verhalten gilt seit PHP 7.3.0 als veraltet
und es wird dringend empfohlen, sich nicht darauf zu verlassen. Ist das
Verhalten gewünscht, so sollte needle explizit in
eine Zeichenkette umgewandelt werden oder explizit die Funktion
chr() aufgerufen werden.
offsetWenn angegeben, dann beginnt die Suche diese Anzahl an Zeichen gezählt vom Beginn des Strings. Ist der Offset negativ, beginnt die Suche diese Anzahl von Zeichen gezählt vom Ende der Zeichenkette.
Gibt die Position, an der sich die Needle befindet, relativ zum Beginn der
haystack Zeichenkette zurück (unabhängig vom
Offset). Es ist zu beachten, dass Stringpositionen mit 0, und nicht mit 1
beginnen.
Gibt false zurück, wenn die Needle nicht gefunden wurde.
Diese Funktion kann sowohl das
boolsche false zurückliefern, als auch einen nicht-boolschen Wert, welcher zu false ausgewertet wird.
Weitere Informationen entnehmen Sie bitte dem Abschnitt über die
boolschen Typen. Benutzen Sie deshalb
den === Operator,
um den Rückgabewert dieser Funktion zu überprüfen.
| Version | Beschreibung |
|---|---|
| 8.2.0 | Die Groß- und Kleinschreibung hängt nicht mehr von der mit setlocale() eingestellten Locale ab. Es wird nur noch die Groß- und Kleinschreibung von ASCII-Bytes verglichen. Nicht-ASCII-Bytes werden nach ihrem Byte-Wert verglichen. |
| 8.0.0 |
needle akzeptiert nun eine leere Zeichenkette.
|
| 8.0.0 |
Die Übergabe eines Integer als needle wird
nicht mehr unterstützt.
|
| 7.3.0 |
Die Übergabe eines Integer als needle wird
missbilligt.
|
| 7.1.0 |
Unterstützung für negative offset-Werte wurde
hinzugefügt.
|
Beispiel #1 stripos()-Beispiele
<?php
$findmich = 'a';
$meinstring1 = 'xyz';
$meinstring2 = 'ABC';
$pos1 = stripos($meinstring1, $findmich);
$pos2 = stripos($meinstring2, $findmich);
// 'a' ist natürlich nicht in 'xyz' enthalten
if ($pos1 === false) {
echo "Die Zeichenkette '$findmich' kommt nicht im String '$meinstring1' vor.", PHP_EOL;
}
// Beachten Sie die Verwendung von ===. Ein einfaches == funktioniert nicht wie
// erwartet, da 'a' an Position 0 (also erster!) Stelle steht
if ($pos2 !== false) {
echo "Die Zeichenkette '$findmich' wurde in '$meinstring2' an Position $pos2 gefunden", PHP_EOL;
}
?>Hinweis: Diese Funktion ist binärsicher.
I found myself needing to find the first position of multiple needles in one haystack. So I wrote this little function:
<?php
function multineedle_stripos($haystack, $needles, $offset=0) {
foreach($needles as $needle) {
$found[$needle] = stripos($haystack, $needle, $offset);
}
return $found;
}
// It works as such:
$haystack = "The quick brown fox jumps over the lazy dog.";
$needle = array("fox", "dog", ".", "duck")
var_dump(multineedle_stripos($haystack, $needle));
/* Output:
array(3) {
["fox"]=>
int(16)
["dog"]=>
int(40)
["."]=>
int(43)
["duck"]=>
bool(false)
}
*/
?>Unlike strpos() it seems that stripos() does NOT issue a WARNING if the needle is an empty string ''.Finding numbers in strings requires you to cast the number to string first.
strpos("123", 2) !== strpos("123", "2")Regarding the === note, it might be worth clarifying that the correct tests for a binary found/not found condition are !==false to detect found, and ===false to detect not found.Regarding the function by spam at wikicms dot org
It is very bad practice to use the same function name as an existing php function but have a different output format. Someone maintaining the code in the future is likely to be very confused by this. It will also be hard to eradicate from a codebase because the naming is identical so each use of stripos() would have to be analyzed to see how it is expecting the output format (bool or number/bool).
Calling it string_found() or something like that would make a lot more sense for long-term use.