我在使用以下代码时遇到问题。我使用 $_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/