Preg_match只能按顺序工作

时间:2016-04-19 08:22:19

标签: php mysql get preg-match row

我遇到以下代码问题。我使用$ _GET获取用户主题,然后将其发送到服务器以查看该行是否包含主题,如果确实如此,则返回匹配的每一行的主题匹配行。这目前工作正常,但如果用户输入让我们说"英语,数学"在数据库中,它被列为"数学,英语和#34;它会失败并且不会回显该行,尽管它只是以不同的顺序是正确的。我有什么问题吗?

谢谢,

CurtisB

    $subjects = $_GET["subjects"];  
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC) and ($counter < $max)) 
    {
       if(preg_match('/'.$subjects.'/',$row['subjects'])){
       echo "subject matches row";         
        }
    }

更新:尝试下面的代码,即使不是正确的主题也会回显每一行。

 function is_matched($subjectsFromUs, $subjectsFromDb){
        $subjectsFromUs = explode($subjectsFromUs, ',');
        $subjectsFromDb = explode($subjectsFromDb, ',');
        foreach($subjects as $s){
            if(!in_array($s, subjectsFromDb))
                return false;
        }
        return true;
    } 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC) and ($counter < $max)) 
{
   if(is_matched($subjects,$row['subjects']) == true ){

echo "subjects matched";
}
}

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下你不应该使用正则表达式。你必须用','爆炸你的$ subject参数,并通过$ row ['subject']遍历该数组:

  function is_matched($subjects, $subjectsFromDb){
        $subjects = explode(',', $subjects);
        $subjectsFromDb = explode(',', $subjectsFromDb);
        foreach($subjects as $s){
            if(!in_array($s, $subjectsFromDb))
                return false;
        }
        return true;
    }