过滤功能

时间:2012-03-08 15:32:17

标签: php function filter return break

我有一个过滤功能,可以检查数组中的两个“字段”,这些是冷名称描述

我还有一个存储在数据库中的单词,过滤函数应该接受某些单词(true)并拒绝某些单词(false)。

实施例: 每个包含 car 字样的帖子都应该被接受。

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

不接受: 卡车 TRAKTOR 母线

所以我有一个应该通过数组中的两个字段( name description )的函数将它们与存储在数据库中的单词相匹配并查看如果字段包含已接受的单词或任何未接受的单词。

我的功能看起来像这样 $ arr =包含 name description 字段的传入数组。 $ 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;       
}

正如你在这里想的那样,如果出现任何不可接受的单词,我想从函数中返回false并中断。这是因为如果已接受的单词已经存在,那么接受的单词是否在名称 description 中并不重要。

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

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

感谢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;
    }
}