2016-04-19 27 views
0

我遇到以下代碼的問題。我使用$ _GET獲取用戶主題,然後將其發送到服務器,以查看該行是否包含主題,如果是,則返回匹配每行的主題匹配行。這目前工作正常,但如果用戶輸入讓我們說「英語,數學」,並在數據庫中它被列爲「數學,英語」它將失敗,不會迴應該行,雖然它是正確的,只是在不同的順序。有什麼我做錯了嗎?Preg_match只能按順序工作

感謝,

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

我認爲你不應該在這種情況下使用正則表達式。你必須通過','爆炸你的$科目參數,並遍歷該陣列低谷$ row ['科目']:

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

我試過這使用下面的代碼,我無法讓它工作。即使當行不是正確的主題,它現在也會迴應。我會把上面的代碼放到你看到的。 –

+0

我編輯了代碼。只是忘了一個$,並在爆炸 – nikit

+0

切換參數似乎現在工作,非常感謝! –