我遇到以下代码问题。我使用$ _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";
}
}
答案 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;
}