-1

我想比较两个不同的数组。基本上我有一个包含短语的数据库,在我的网站上我有一个搜索功能,用户可以在其中输入短语。当他们单击搜索时,我有一个 PHP 页面,它“分解”用户输入的字符串并将其放入数组中。然后我从我也使用了“explode”函数的数据库中提取所有短语,并将所有单词拆分成一个数组。我现在想比较所有数组以找到与每个短语匹配的 3 个或更多单词的紧密匹配。

我该怎么做呢?

好吧,我尝试过的完全失败了,但这就是我所拥有的

$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 个或更多匹配单词的短语。

4

2 回答 2

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;

?>
于 2012-08-03T10:29:02.443 回答
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; ;
于 2012-08-03T10:46:23.293 回答