【问题标题】:Preg_match only working in orderPreg_match 仅按顺序工作
【发布时间】:2016-04-19 08:22:19
【问题描述】:

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

谢谢,

柯蒂斯

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

【问题讨论】:

    标签: php mysql get preg-match row


    【解决方案1】:

    我认为在这种情况下你不应该使用正则表达式。您必须将 $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;
        }
    

    【讨论】:

    • 我已使用以下代码尝试过此操作,但无法使其正常工作。即使该行不是正确的主题,它现在也会回显。我把代码放在上面给大家看看。
    • 我已经编辑了代码。只是忘记了一个$并在explode中切换参数
    • 经过进一步调查,这段代码并不完全是我所需要的,因为如果在 mysql 中该行是“maths”并且我输入“maths,english”作为主题,只有在以下情况下才会返回 true我输入数学会返回true吗?
    • 如果您想查找不包含所有 $subjects 的行,但其中任何一个,只需将条件更改为该格式 function is_matched($subjects, $subjectsFromDb){ $subjects = explode(' ,', $主题); $subjectsFromDb = explode(',', $subjectsFromDb); foreach($subjects as $s){ if(in_array($s, $subjectsFromDb)) return true; } 返回假; }
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多