我有2个数组。一个有坏关键字,另一个有网站名称。
$bad_keywords = array('google',
'twitter',
'facebook');
$sites = array('youtube.com', 'google.com', 'm.google.co.uk', 'walmart.com', 'thezoo.com', 'etc.com');
简单任务:我需要在$sites
数组中进行过滤,并过滤 包含在{{1}中找到的任何关键字的任何值数组。在它结束时,我需要一个具有干净值的数组,我根本不会发现任何bad_keywords。
我已经在网上搜索过,似乎无法找到一个简单易用的解决方案。以下是我尝试过的几种方法:
1.使用2个$bad_keywords
循环(感觉较慢 - 我认为使用内置的php函数会加快它的速度)
2. array_walk
3. array_filter
但我还没有设法确定最好,最有效的方法。我希望有一个工具可以根据可能长达1k的关键字列表过滤20k +网站列表,因此性能至关重要。此外,在这种情况下,实际搜索的最佳方法是什么?foreach
或regex
?
还有哪些其他方法可以做到这一点以及最好的方法是什么?
答案 0 :(得分:2)
使用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
)