我正在尝试比较两个数组的内容
<?php
$badwords = array('badword1','badword2','badword3');
$domains = array('domainword1.com', 'word2domain.com', 'domain.com');
if (preg_match($badwords,$domains) { // searched and did not find if it works like this
- echo the $domains that matches the $badwords // this is what i don't know how to do
}
在这种情况下,它应该回应:
匹配的域为:
domainword1.com
word2domain.com
在新行中。
我该怎么做?
我真的不知道为什么在这种情况下需要regex。第二,正如Jim
提到的What counts as a match in this case?
,事情就是这样。
您需要从重写$badwords
数组
$badwords = array('badword1','badword2','badword3');
至
$badwords = array('word1','word2','word3');
使用以下代码可以获得所需的输出。
<?php
$badwords = array('word1','word2','word3');
$domains = array('domainword1.com', 'word2domain.com', 'domain.com');
$newarr = array();
foreach($badwords as $k=>$v)
{
foreach($domains as $k1=>$v1)
{
if(strpos($v1,$v)!==false)
{
array_push($newarr,$v1);
}
}
}
print_r($newarr);
输出:
Array
(
[0] => domainword1.com
[1] => word2domain.com
)
如果需要将任何$baddwords与任何$domains匹配,则不能像这样使用preg_match。相反,你应该这样做:
<?php
$badwords = array('badword1', 'badword2', 'badword3', 'badword('d+)');
$domains = array('domainword1.com', 'word2domain.com', 'domain.com', 'badword1.com', 'ohbadword123.com');
$badDomains = array_filter($domains, function($domain) use ($badwords) {
$found = false;
foreach ($badwords as $badword) {
// use this if you dont' need regular expressions:
// if (substr_count($domain, $badword)>0) {
// use this if you need them:
if (preg_match('/' . $badword . '/', $domain)) {
$found = true;
break;
}
}
return $found;
});
if (!empty($badDomains)) {
echo "Domains with bad words:'n - " . join("'n - ", $badDomains);
}