0

重複の可能性:
このコードの結果を並べ替えるには?

ユーザーが検索バーに質問を入力できるようにするこのコードを作成しました。次に、このコードはその質問を受け取り、データベース内の質問のある単語を探します。次に、各質問に一致する単語の数をカウントします。完了すると、一致する単語の数に応じて、上位 4 つの最も一致する質問が表示されます。ただし、現時点では、これらの一致を最低の単語一致から最高の単語一致 (低から高) まで表示します。このコードでこれを行うにはどうすればよいですか?

    <?php
        include("config.php");
        $search_term = filter_var($_GET["s"], FILTER_SANITIZE_STRING); //User enetered data
        $search_term = str_replace ("?", "", $search_term); //remove any question marks from string

        $array = explode(" ", $search_term); //Seperate user enterd data

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

        $q = "SELECT * FROM posts WHERE  " . implode(' OR ', $array); //Query to select data with word matches
        $r = mysql_query($q);
        $count = 0; //counter to limit results shown
            while($row = mysql_fetch_assoc($r)){
            $thetitle = $row['title']; //result from query
            $thetitle = str_replace ("?", "", $thetitle);  //remove any question marks from string
            $title_array[] = $thetitle;  //creating array for query results
            $newarray = explode(" ", $search_term); //Seperate user enterd data again

            foreach($title_array as $key => $value) {
               $thenewarray = explode(" ", $value); //Seperate each result from query
               $wordmatch = array_diff_key($thenewarray, array_flip($newarray));
               $result = array_intersect($newarray, $wordmatch);
               $matchingwords = count($result); //Count the number of matching words from user entered data and the database query
            }
        if(mysql_num_rows($r)==0)//no result found{
            echo "<div id='search-status'>No result found!</div>";
        }
        else //result found
        {
        echo "<ul>";

        $title = $row['title'];
        if ($matchingwords >= 4){
        ?>
<li><a href='<?php echo $row['url']; ?>'><?php echo $title ?><i> &nbsp; No. matching words: <?php echo $matchingwords; ?></i></a></li>
<?php
                $count++;
                if ($count == 5) {break;
                }
                    }else{
                    }
                }
            echo "</ul>";
            }
?>
4

4 に答える 4

0

データを配列に保存した場合は、http://www.php.net/manual/en/function.array-reverse.phpを使用してデータを逆にすることができます。

それ以外の場合は、いくつかのソート関数があります http://php.net/manual/en/function.sort.php

于 2012-08-04T07:50:10.720 に答える
0

配列のソートに問題があると思います。

配列がある場合、並べ替えは問題ではありません。

phpで見つかったさまざまな種類の並べ替えがあります。

arsort()

配列を逆の順序で並べ替え、インデックスの関連付けを維持します

http://www.php.net/manual/en/function.asort.php

この配列関数を使用するか、質問を簡単に教えてください。

于 2012-08-04T07:52:42.387 に答える
0

独自のフィルター関数を作成できます

// sorts an array by direction
function arr_sort($arr, $index, $direction='asc')
{
    $i_tab = array();
    foreach ($arr as $key => $ele)
    {
        $i_tab[$key] = $arr[$key][$index];
    }
    $sort = 'asort';
    if (strtolower($direction) == 'desc')
    {
        $sort = 'arsort';
    }
    $sort($i_tab);
    $n_ar = array();
    foreach ($i_tab as $key => $ele)
    {
          array_push($n_ar, $arr[$key]);
    }
    return($n_ar);
}

たとえば、配列 $arr = array('key' => 'value', 'key2' => 'value'); があります。

key2 ascでソートできるようになりました

$arr = arr_sort($old_arr, 'key2', 'desc');

そのため、一致する単語の合計数を任意のエントリのノードとして配列に入れ、降順でフィルタリングできます

于 2012-08-04T07:55:36.820 に答える