Tach!
Da braucht es kein *. Teilstrings sucht man mit strpos(). Wenn das Ergebnis 0 (und nur 0, nicht etwa false) ist, dann entspricht das einem suchbegriff*. Für *suchbegriff müsstest du etwas rechnen, und ermitteln, ob die Position des "suchbegriff" gleich Stringlänge minus "suchbegriff"-Länge ist. Bei *suchbegriff* muss das Ergebnis lediglich ungleich false (false!, nicht 0) sein.
Wäre es für bla* bzw *bla nicht effizienter, substr und == zuverwenden, statt den String abzusuchen?
Das kannst du ja gern selbst messen, der Unterschied wird aber im Rauschen untergehen, besonders bei einer "haushaltsüblichen" Anzahl an Verwendungen pro Script. Teilstring-Suche ist ein bereits seit langem gelöstes Problem, der Algorithmus dazu sollte sehr effizient arbeiten.
function str_startswith($haystack, $needle) {
Diese Funktion ist schon länger zu notieren als der Einzeiler mit strpos(). Und wenn die Nadel länger als der Heuhaufen ist, kann das Ergebnis nur false werden. Selbst das muss man nicht extra prüfen, denn es stört nicht, wenn zu viel abzuschneiden versucht wird. Das substr()-Ergebnis ist dann trotzdem nur so lang wie der Heuhaufen und damit immer noch ungleich der Nadel.
return substr($haystack, 0, strlen($needle)) == $needle;
function str_endswith($haystack, $needle) {
Lässt sich sicherlich ähnlich verkürzen, und nur diese Funktion wird gebraucht. Für den Rest plädiere ich weiterhin dafür, die vorhandenen Werkzeuge zu verwenden.
dedlfix.