2017-08-23 6 views
1

J'ai 2 tableaux. Un avec de mauvais mots-clés et l'autre avec des noms de sites.Recherche de mots-clés d'un tableau par rapport aux valeurs d'un autre tableau - php

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

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

tâche simple: j'ai besoin de filtrer à travers le réseau $sites et filtrer sur toute valeur contient un mot clé qui se trouve dans le tableau $bad_keywords. À la fin de celui-ci j'ai besoin d'un tableau avec des valeurs propres que je ne trouverais pas de bad_keywords se produisant du tout.

J'ai parcouru le web et je n'arrive pas à trouver une solution simple et facile pour cela. Voici plusieurs méthodes que j'ai essayé: 1.
avec 2 boucles foreach (se sent plus lent - je pense à l'aide intégrée dans-fonctions PHP accélérer)
2. array_walk
3. array_filter

Mais je n'ont pas réussi à définir la meilleure manière, la plus efficace. Je souhaite disposer d'un outil permettant de filtrer une liste de sites 20k + par rapport à une liste de mots clés pouvant atteindre 1k de long. Les performances sont donc primordiales. En outre, quelle serait la meilleure méthode pour la recherche réelle dans ce cas - regex ou strpos?

Quelles sont les autres options disponibles et quelle serait la meilleure solution?

+0

ce que votre résultat attendu –

+0

@ArunKumaresh sortie: le tableau de sites $ filtré (c.-à-ne contient pas d'éléments qu'un bad_keyword se trouve à l'intérieur de sa valeur) – Ben

Répondre

2

solution courte en utilisant la fonction preg_grep:

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

La sortie:

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