过滤器功能


Filter function

我有一个过滤器函数,它应该检查数组中的两个"字段",它们是冷名称描述

我还将单词存储在数据库中,过滤功能应该接受某些单词(true)并拒绝某些单词(false)。

示例:每一篇包含car字样的帖子都应被接受。

在数据库中,我存储了以下可接受的单词:汽车(显然)

不接受:卡车traktor总线

因此,我有一个函数,它应该遍历数组中的两个字段(名称描述),将它们与数据库中存储的单词匹配,并查看这些字段是否包含接受的单词或任何未接受的单词。

我的函数如下$arr=带有字段名称描述的传入数组。$a['value']=如果为0,则不接受单词;如果为1,则接受单词。$a['filter']=数据库中的单词。

function checkFilter($arr)
{
    $name = strtolower($arr['name']);
    $description = strtolower($arr['description']);
    $dbh = $this->connect();    
    $rs = $dbh->prepare("SELECT * FROM filter");
    $rs->execute();
    $all = $rs->fetchAll();
foreach($all as $a)
{
    if($a['value'] == 0 && strstr($name, strtolower($a['filter']), true))
    {
        return false;
        break;
    }
    if($a['value'] == 0 && strstr($description, strtolower($a['filter']), true))
    {
        return false;
        break;
    }
    if($a['value'] == 1 && strstr($name, strtolower($a['filter']), true))
    {
        return true;
        break;
    }
    if($a['value'] == 1 && strstr($description, strtolower($a['filter']), true))
    {
        return true;
        break;
    }
}
return false;       
}

正如你所说,我的想法是,如果出现任何不可接受的单词,我想从函数和break中返回false。这是因为接受的单词是否在名称描述中并不重要,如果不接受的单词已经存在。

foreach之后,我有一个返回false,因为如果它找不到可接受的单词(如car),它应该被过滤掉。

我的问题是,这似乎不起作用。在函数进入if语句后,它似乎不会破坏函数。

我应该如何解决这个问题?

试试这个:

function checkFilter($arr)
{
$good=false;
$bad=false;
    $name = strtolower($arr['name']);
    $description = strtolower($arr['description']);
    $dbh = $this->connect();    
    $rs = $dbh->prepare("SELECT * FROM filter");
    $rs->execute();
    $all = $rs->fetchAll();
foreach ($all as $a)
  {
    if($a['value']==0)
      {
        if(strpos($name,$a['filter']!=='false') || strpos($description,$a['filter']!=='false') ){$good=true;}
      }
    if($a['value']==1)
      {
        if(strpos($name,$a['filter']!=='false') || strpos($description,$a['filter']!=='false') ){$bad=true;}
      }    
  }
return ($good && !$bad);
}

感谢TecBrat的回答。我对你的例子做了一点修改,使它起作用了。现在看起来是这样的:

function checkFilter($arr)
{
    $name = strtolower($arr['name']);
    $description = strtolower($arr['description']);
    $dbh = $this->connect();    
    $rs = $dbh->prepare("SELECT * FROM filter");
    $rs->execute();
    $all = $rs->fetchAll();
    $bad = 3;
    $good = 3
    foreach ($all as $a)
    {
        if($a['value']==0)
        {
            if((strpos($name, strtolower($a['filter']))!==false) || (strpos($description, strtolower($a['filter']))!==false))
            {
                $bad = 0;
            }
        }
        if($a['value']==1)
        {   
            if((strpos($name, strtolower($a['filter']))!==false) || (strpos($description, strtolower($a['filter']))!==false) )
            {
                $good = 1;
            }
        }    
    }
    if($good == 1 && $bad != 0){
        return $good;
    }
    else
    {
        return $bad;
    }
}