使用php对来自2个阵列的匹配数据进行回声处理


Echoing matched data from 2 arrays with php

我正在尝试比较两个数组的内容

   <?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);
}