php - Preg_match 仅按顺序工作

标签 php mysql get preg-match row

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

谢谢

柯蒂斯B

    $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";
}
}

最佳答案

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

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

关于php - Preg_match 仅按顺序工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36712621/

相关文章:

php - php抽象类中的构造函数有什么用

php - 将 android 与 MYSQL 和 PHP localhost 连接

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

php - MySQL 和 PHP 获取通过考试的特定学生

.net - 无法使用 GET 请求发送内容正文

php - 如果用户在另一个表上有数据,则选择用户

mysql - 联合 MySQL 查询

javascript - 如何在 GET url 查询字符串中传递 Json 对象

php - 通过 url 将 javascript var 传递给 PHP

mysql - 如何在 mysql 中创建唯一依赖项?