-1

2 つの異なる配列を比較したいと考えています。基本的に、私は自分のウェブサイトにフレーズを含むデータベースを持っており、ユーザーがフレーズを入力する検索機能を持っています。彼らが検索をクリックすると、ユーザーが入力した文字列を「分解」して配列に入れる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 />";     
        }

    }

}


しかし、基本的には、ユーザーが検索ボックスに既に入力したものに似た提案されたフレーズを表示するだけです。したがって、「同じ値を持つ 2 つの配列を比較するにはどうすればよいですか?」と検索すると、「複数の配列を比較するにはどうすればよいですか?」のように、類似した表現の提案が 10 件表示されます。または「2つの配列を比較できますか」など...
基本的に、この質問をこのサイトに最初に投稿したときのように、役立つかもしれない他の質問がありました。私が使用しているこのコードは、もともと 1 つの単語または正確に一致する文字列に一致するものでしたが、一致する単語を見つけて、3 つ以上の一致する単語を持つフレーズのみを表示するように編集しています。

4

2 に答える 2

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 に答える
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 に答える