2012-08-03 63 views
-1

我想比較兩個不同的數組。基本上我有一個數據庫,在我的網站上和在我的網站上我有一個搜索功能,用戶鍵入一個短語。 當他們點擊搜索我有一個PHP頁面,它'爆炸'用戶輸入的字符串,並將其放入數組中。 然後我從我的數據庫中提取所有的短語,我也使用了'爆炸'功能,並將所有單詞分成一個數組。 我現在想要比較所有數組以找到與每個短語匹配的3個或更多單詞的緊密匹配。PHP比較來自不同位置的兩個數組

我該怎麼做?

那麼什麼我已經試過完全失敗了,但這裏是我

$search_term = filter_var($_GET["s"], FILTER_SANITIZE_STRING); //user entered data 
$search_term = str_replace ("?", "", $search_term); //removes question marks 

$array = explode(" ", $search_term); //breaks apart user entered data 

foreach ($array as $key=>$word) { 
$array[$key] = " title LIKE '%".$word."%' "; //creates condition for MySQL query 
} 

$q = "SELECT * FROM posts WHERE " . implode(' OR ', $array) . " LIMIT 0,10"; 
$r = mysql_query($q); 
    while($row = mysql_fetch_assoc($r)){ 
    $thetitle = $row['title']; 
    $thetitle = str_replace ("?", "", $thetitle); 
    $title_array[] = $thetitle; 

$newarray = explode(" ", $search_term); 

foreach ($newarray as $key=>$newword) { 
    foreach($title_array as $key => $value) { 
     $thenewarray = explode(" ", $value); 
     $contacts = array_diff_key($thenewarray, array_flip($newarray)); 
     foreach($contacts as $key => $value) { 
       echo $newword."<br />"; 
       echo $value."<br /><hr />";  
     } 

    } 

} 


但基本上所有我想要的是顯示建議詞組,類似於用戶已經輸入到搜索框。 因此,如果我搜索「如何比較兩個具有相同值的數組?」,我會看到10個措辭相似的建議,例如「如何比較多個數組?」。或「我可以比較兩個陣列」等...
所以基本上就像當我第一次在這個網站上發佈這個問題時,我得到了其他問題可能有所幫助,那基本上是我想要的。我使用的這個代碼在原始上只匹配一個單詞或一個完全匹配的字符串,即時編輯它以查找匹配的單詞並僅顯示具有3個或更多匹配單詞的短語。

+1

那你試試? – Oussama 2012-08-03 10:18:57

+1

爲我們提供示例數據,預期輸出,嘗試解決方案的示例代碼以及當前無法使用的示例代碼。這太抽象了,無法詳細回答。 – deceze 2012-08-03 10:20:40

+0

即使你確實得到了這個工作,對於大量的數據來說,它的效率會非常低下。您需要考慮優化數據結構,並儘可能將盡可能多的工作委託給數據庫。 – mdm 2012-08-03 10:28:33

回答

0

我不認爲這是您的搜索腳本的最佳解決方案。不過,我會盡量給你答案:

<?php 

    $string1 = "This is my first string"; 
    $string2 = "And here is my second string"; 

    $array1 = explode(" ", $string1); 
    $array2 = explode(" ", $string2); 

    $num = 0; 
    foreach($array1 as $arr) { 
     if(in_array($arr, $array2)) 
      $num++; 
    } 

    $match = $num >= 3 ? true : false; 

?> 
0

使用array_intersect功能

$firstArray = "This is a test only"; 
    $secondArray = "This is test"; 
    $array1 = explode(" ", $firstArray); 
    $array2 = explode(" ", $secondArray); 

    $result = array_intersect($array1, $array2); 
    $noOfWordMatch = count($result); 
    $check = $noOfWordMatch >= 3 ? true : false; ; 
+0

謝謝,我只是測試了這一點,雖然它不是我想要的,但它在某種程度上確實有用,所以我很確定我可以調整它以適應我的頁面。謝謝 – Ben 2012-08-03 10:49:17

相關問題