Immer wieder wird in Foren oder im IRC strpos() empfohlen um zu prüfen ob etwas in einem String vorkommt. Sehen wir uns einmal an warum substr_count() besser dazu geeignet ist:
$str = "ich bin ein teststring"; if (strpos($str, "bin")) { // liefert die Position zurück, Integer: 4 // Dieser Block wird ausgeführt. } else { }
Funktioniert ganz gut. Doch was passiert wenn wir nach “ich” suchen?
$str = "ich bin ein teststring"; if (strpos($str, "ich")) { // In dem Fall Integer: 0 } else { // Dieser Block wird ausgeführt. }
Was ist passiert? Wir sehen im zweiten Beispiel, dass der else-Teil ausgeführt wird obwohl ein Vorkomniss gefunden wurde. Das liegt ganz einfach daran, dass strpos() eine Positionsangabe zurückliefert und wie wir alle wissen ist 0 für den Computer die erste Zahl. Da der Integerwert 0 aber auch für bool(false) steht, springt er in den else-Teil. Wir müssen bei strpos() also nicht nur den Wert sondern auch den Typ prüfen denn diese Funktion kann je nach Ergebniss 0 oder false zurückliefern was nicht das gleiche ist. Korrekt wäre also:
$str = "ich bin ein teststring"; if (strpos($str, "ich") !== false) { // Hier auch Integer: 0 // Dieser Block wird ausgeführt. } else { }
Fazit: Wenn man einfach nur wissen will ob sich etwas in einem String befindet, sollte man substr_count() benutzen. Wer jedoch die Position braucht oder Gewicht auf (meiner Meinung nach vernachlässigbarer) Performance legt kann auch strpos() nutzen, sollte allerdings nicht vergessen den Typ der Rückgabe zu prüfen.
Kommentar verfassen