PHP比较来自不同位置的两个数组

时间:2012-08-03 10:17:41

标签: php arrays

我想比较两个不同的数组。基本上我在我的网站上有一个包含短语的数据库我有一个搜索功能,用户输入一个短语。 当他们点击搜索时,我有一个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个或更多匹配单词的短语。

2 个答案:

答案 0 :(得分: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;

?>

答案 1 :(得分: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; ;
相关问题