Rolf B: Array mit Stopwords Array verbessern (PHP)

Beitrag lesen

Hallo,

habe gerade mal in den Sourcecode von array_diff geguckt - die bauen aus den Parametern 2-n eine Hashmap auf und geben dann aus dem ersten Array alles zurück, was nicht in der Hashmap ist.

Wenn Du die Stopwort-Liste nur auf ein Array anwenden musst, ist das wohl der effektivste Weg.

Wenn Du sie aber auf MEHRERE Arrays anwenden musst, ist es ggf. nicht effizient, weil du keine Möglichkeit hast, die intern erzeugte Hashmap für mehrere Einsätze wiederzuverwenden. In dem Fall erzeugst Du die Hashmap besser selbst, und zwar mit dem schon erwähnten array_flip. Und dann läufst Du über das Array, aus dem die Stopworte entfernt werden sollen, und prüfst für jedes mit isset nach, ob das Wort in der Hashmap steht.

Statt eines Standard-Array kannst du Dir auch die PECL-Extension Data Structures anschauen, darin die Klasse set. Sie dürfte auf jeden Fall speichersparender sein als ein Array (was bei deinen Mengen relevant sein kann). Ob die contains-Methode von Set schneller ist als ein isset(array[wort]), muss man wiederum messen. Ich habe keine Benchmarks.

Ab wann eine eigene Hashmal schneller ist als array_diff, muss man messen. Es hängt von der Größe der Stopwortliste ab; ggf. sind 2-3 Anwendungen von array_diff noch schneller, aber irgendwann müsste sich die eigene Hashmap auszahlen.

Rolf

--
sumpsi - posui - clusi