2009-08-16 18 views
0

Ich baue eine grundlegende Suchfunktion für meine Website. Die Erkenntnis, dass die nützlichsten Suche zeigt die Seite mit den Zählungen der Begriffe angegeben, codiert ich folgendes:Suchergebnisse nach der Anzahl der Übereinstimmungen sortieren?

function search() 
{ 
    $this->page = preg_replace('/[^\w \"\']/i', '', trim($this->page)); 
    preg_match_all('/"(.[^"]+)"|([\w]+)/i', $this->page, $terms); 
    $terms=array_unique($terms[0]); // scrub duplicate search terms 
    $tsql="SELECT reviewSummary, reviewFullText, game.gameName FROM review LEFT JOIN game ON review.gameID = game.gameID "; 
     $constraint="WHERE"; 
     foreach ($terms as $term) 
     { 
      $term=str_replace('"','',$term); 
      $tsql.=" $constraint (reviewSummary LIKE '%".$term."%' OR reviewFullText LIKE '%".$term."%' OR game.gameName LIKE '%".$term."%')"; 
      $constraint="AND"; 
     } 
     $tsql .= "AND game.isPublished = 'y'"; 
     $result = $this->sql->db_query($tsql); 
     if (mysql_num_rows($result)!=0) 
     { 
      while($row = mysql_fetch_array($result)) 
      { 
       $gameName = stripslashes($row['gameName']); 
       $content = strip_tags($row['reviewFullText']) . ' ' . $row['reviewSummary']; 
       $counter = 0; 
       foreach($terms as $term) 
       { 
        $term=str_replace('"','',$term); 
        preg_match_all("/($term)/i", $content, $matches); 
        foreach($matches[0] as $m) 
        { 
         $counter++; 
        } 
       } 
       $found["Games"][$gameName]=$counter; 
      } 
     } 
     print_r($found); 
} 

Arbeiten groß. Was es tut, ist nicht do ist die Reihenfolge, in Übereinstimmung mit, welche die meisten Übereinstimmungen hat. Ich bin nicht sicher, wie man das resultierende Array sortiert, um das zu erreichen, kann jemand helfen?

Antwort

1

Werfen Sie einen Blick auf uasort(), die ein assoziatives Array mit einer benutzerdefinierten Vergleichsfunktion sortieren können. So etwas sollte es tun ...

function cmp($a, $b) { 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? 1 : -1; 
} 

uasort($found["Games"], 'cmp'); 
+0

Das war * schnell *. Danke Paul! – different

Verwandte Themen