2012-08-03 100 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