2017-08-23 1 views
1

Ich habe 2 Arrays. Eines mit schlechten Keywords und das andere mit Namen von Websites.Suche Schlüsselwörter von einem Array gegen Werte eines anderen Arrays - php

$bad_keywords = array('google', 
         'twitter', 
         'facebook'); 

$sites = array('youtube.com', 'google.com', 'm.google.co.uk', 'walmart.com', 'thezoo.com', 'etc.com'); 

einfache Aufgabe: Ich muss durch die $sites Array filtern und filtern out Jeder Wert, der enthält jedes Schlüsselwort, das in dem $bad_keywords Array gefunden wird. Am Ende davon brauche ich ein Array mit sauberen Werten, bei denen ich keine bool_keywords finden würde.

Ich habe das Internet durchforstet und kann nicht scheinen, eine einfache einfache Lösung dafür zu finden. Hier sind mehrere Methoden, die ich versucht habe:
1. mit 2 foreach Schleifen (fühlt sich langsamer - Ich denke, mit in-built PHP-Funktionen wird es beschleunigen)
2. array_walk
3. array_filter

Aber ich Es ist mir nicht gelungen, den besten und effizientesten Weg zu finden. Ich möchte ein Tool haben, das durch eine Liste von 20k + -Sites gegen eine Liste von Stichwörtern filtert, die bis zu 1k lang sein können, so dass die Leistung im Vordergrund steht. Auch, was wäre die bessere Methode für die tatsächliche Suche in diesem Fall - regex oder strpos?

Welche anderen Optionen gibt es, dies zu tun und was wäre der beste Weg?

+0

was Ihre erwartete Ausgabe –

+0

@ArunKumaresh Ausgang: das gefilterte $ Websites Array (dh keine Elemente enthalten, die eine bad_keyword ist in seinem Wert gefunden) – Ben

Antwort

2

Short-Lösung preg_grep Funktion:

$result = preg_grep('/'. implode('|', $bad_keywords) .'/', $sites, 1); 
print_r($result); 

Die Ausgabe:

Array 
(
    [0] => youtube.com 
    [3] => walmart.com 
    [4] => thezoo.com 
    [5] => etc.com 
) 
Verwandte Themen