Du fragst die Treffer ja auch erst nach dem Durchlaufen aller Zeilen ab. In $treffer sammeln sich aber nicht die Treffer, sondern es stehen nur die drin, die beim letzten Aufruf der Funktion gefunden wurden. Vermutlich hört deine Datei nicht mit einer Treffer-Zeile auf.
Ja, sowas hatte ich mir schon gedacht, aber es leider nur auf die Datei bezogen, nicht (richtigerweise) auf die Zeile.
Vereinfachungen:
Du musst nicht jede Zeile einzeln prüfen. Da du mit preg_match_all() arbeitest, kannst du auch gleich die gesamte Datei auf einmal prüfen lassen. Nimm file_get_contents() statt file().
Danke für den Tip. Der hört sich ähnlich gut an, wie der glob-Tip. ;-)
In Summe ein schöner schlanker Code, findest Du nicht?
Was wäre an Deinem Beispiel (das objektorientierte) eigentlich noch besser gewesen?
Gruß, Heinz