根据另一个数组的值从一个数组中搜索关键字 - 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+ 站点列表,因此性能至关重要。此外,在这种情况下实际搜索的更好方法是什么 - regex
或 strpos
?
还有哪些其他选择可以做到这一点?最好的方法是什么?
使用 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
)
我有 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+ 站点列表,因此性能至关重要。此外,在这种情况下实际搜索的更好方法是什么 - regex
或 strpos
?
还有哪些其他选择可以做到这一点?最好的方法是什么?
使用 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
)