我有一个过滤器函数,它应该检查数组中的两个"字段",它们是冷名称和描述。
我还将单词存储在数据库中,过滤功能应该接受某些单词(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;
}
}