根据另一个数组的值从一个数组中搜索关键字 - php

Searching keywords from one array against values of another array - php

我有 2 个数组。一个带有错误关键字,另一个带有网站名称。

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

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

简单任务:我需要过滤 $sites 数组并过滤 out 包含 任何关键字的任何值在 $bad_keywords 数组中找到。最后,我需要一个具有干净值的数组,我根本找不到任何 bad_keywords 出现。

我已经在网上搜索过了,但似乎找不到一个简单易行的解决方案。以下是我尝试过的几种方法:
1. 使用 2 foreach 循环(感觉更慢 - 我认为使用内置 php 函数会加快速度)
2. array_walk
3. array_filter

但我还没有找到最好、最有效的方法。我想要一个工具,可以根据可能长达 1k 的关键字列表过滤 20k+ 站点列表,因此性能至关重要。此外,在这种情况下实际搜索的更好方法是什么 - regexstrpos

还有哪些其他选择可以做到这一点?最好的方法是什么?

使用 preg_grep 函数的简短解决方案:

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

输出:

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