Wie oft kommt string1 in string 2 vor? Kleine Hilfe …

Weil ich es nun schon oft gesehen habe, hier mal die kleine Anleitung zum Thema: „Wie zähle ich, wie oft string1 in string 2 vorhanden ist?“

Ich sehe fast täglich neue implementationen dazu, wobei sich die entsprechenden Programmierer des öfteres mal „einen abbrechen“, eine aufwändige Funktion zu erstellen, die dann aber doch an Kleinigkeiten scheitert (z.B. keine UFT-8 Unterstützung, nicht binary-safe, usw.).

Aber warum machen es sich die Leute so schwer?
Weil diese Leute die PHP-Funktion substr_count nicht kennen.

Ein Beispiel: Ihr wollt zählen, ob eine Zeichenkette in einem String vorkommt, dann geht das hiermit am schnellsten:

$string = "Hallo Welt, ich bin da, dein liebster elton!";
$suchstring = "elt";
if (substr_count($string,$suchstring) > 1)
{   
  // suchstring in string mindestens einmal vorhanden, macht was
}
else
{  
  // suchstring NICHT vorhanden
}

Gar nicht schwer, oder?

Darüberhinaus kann man auch einen offset angeben, sozusagen die Startposition, in unserem Beispiel oben ergibt das:

echo substr_count($string,$suchstring);
echo substr_count($string,$suchstring,12);

Ergebnis:
2
1

Der optionale vierte Parameter gibt die Suchlänge an, d.h.:

echo substr_count($string,$suchstring);
echo substr_count($string,$suchstring,12,3);

Ergebnis nun:
2
0

Die Funktion ist sehr schnell – in meinen Tests sogar schneller wie strpos – und läßt sich auch sehr einfach einsetzen; darüberhinaus ist substr_count binary-safe, d.h. es arbeitet auch mit UTF-8 usw.

Mein Tipp: spart euch Zeit und nerven, benutzt die Funktionen die schon da sind, erfindet nicht das Rad neu und werdet schneller produktiv…

3 Gedanken zu „Wie oft kommt string1 in string 2 vor? Kleine Hilfe …

  1. Lord Skihelm

    Hi,
    gut das ich noch deine Seite gefunden hatte. Ich wollte schon mit preg_match anfangen. Ist echt schlimm was man so im Netzt für unterschiedliche Ansätze findet und wie Du bereits sagtest: die meisten „proger“ brechen sich einen ab.

    Thx
    Lord Skihelm

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert