2012-03-08 240 views
0

我有一個過濾功能,應該檢查一個數組中的兩個「字段」,這些是冷的名稱描述過濾功能

我也有存儲在數據庫中的單詞,其中過濾函數應該接受某些單詞(true)並拒絕某些單詞(false)。

例如: 應接受每一個帖子來包含單詞

在其中接受了我已經存儲在數據庫下面的話: 汽車(顯然)

不接受: 卡車 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;  
} 

正如你瑟我以爲這裏是,如果任何一個不能接受的話都顯示出來我想從函數返回false,並打破。這是因爲如果接受的單詞在名稱說明如果未接受的單詞已經存在,則無關緊要。

之後,我有一個返回false,因爲如果它找不到接受的詞(例如汽車),它應該被濾除。

我的問題是,這似乎並沒有工作。在它進入if語句後,它似乎並沒有打破這個功能。

我應該如何解決這個問題?

+0

如果存在接受或未接受的詞否定另一個的效果。我的意思是,如果接受的不被接受的詞都存在,會發生什麼? – TecBrat 2012-03-08 15:38:41

+0

如果未被接受的話出現,則不應考慮接受的詞。舉個例子:「一輛藍色的卡車正在開車」這裏有車,但是因爲卡車應該返回假。其他例子「一輛藍色汽車正在駕駛」。這應該返回true。 – Fredrik 2012-03-08 15:41:42

+0

如果兩者都不存在,會發生什麼情況。 「一輛藍色的福特正在駕駛」 – TecBrat 2012-03-08 15:59:23

回答

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

如果我顛倒了你的好域和壞域,只需交換$ good = true和$ bad = true – TecBrat 2012-03-09 03:00:17

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; 
    } 
} 
+0

爲什麼你從布爾變換爲整數? – TecBrat 2012-03-09 13:55:21