hast du berücksichtigt, dass file() beim einlesen die zeilenumbrüche am ende jeder zeile bestehen lässt?
nein, dass nicht, da der betreffende string ganz am anfang jeder datei vorkommt:
news_1@blabla|blalba|blalbal
in_array() sucht nicht irgendein Teilstück in einem Array sondern einen vollständigen Wert. Wenn ein Wert in deinem Array news@bla heißt und du "nur" nach news suchst wird das von in_array() nicht gefunden.
In deinem Fall liefert in_array() true zurück, wenn du nach "news_1@blabla|blalba|blalbal\n" suchen würdest (beachte das \n am Ende).
Du musst also zu Fuß über das Array iterieren und die Elemente mit z.B. substr_count() auf ein Ergebnis > 0 testen. (substr_count() hat gegenüber strpos() den Vorteil, dass man bei einem Vorkommen des zu suchenden Strings an der Position 0 als Ungeübter nicht auf die Nase fällt. :-)