sortieren der Treffer (Suchscript)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • sortieren der Treffer (Suchscript)

    Hi allerseits,

    ich hab hier ein ziemliches Problem mit einem Suchscript / Lexikon. Das Script funktioniert soweit, dass es eine Textdb nach Begriffen durchsucht und im Trefferfall entweder:

    a)Treffer-Links aus der DB holt, die entsprechenden Dateien dann einliest & einen kurzen Vorschautext ausgibt

    b)oder falls kein Link vorhanden, eine Kurzbeschreibung aus der textdb einliest.

    Mein Problem ist jetzt, dass er die Links nach Häufigkeit der in den Unterseiten enthaltenen Treffern sortieren sollte. Ich komm soweit, dass die jeweilige Anzahl der Treffer aufgelistet wird, aber weiter gehts irgendwie nicht.

    Ich müsste ja eigentlich die aus der Textdb eingelesenen Daten in Abhängigkeit der später eingelesenen Unterseiten sortieren. Geht das überhaupt? Bisher war alles Murks, was ich probiert hab, von daher wär es klasse, wenn jemand weiterhelfen könnte.

    Hier mal der Ausschnitt:

    PHP-Code:
    <?

    ...

    // Prüfen, ob Begriff vorhanden
    if (isset($query)) kontrolle($query);
    elseif (substr($QUERY_STRING,0,5) == "index") i_control();
    else suche("");

    function kontrolle($q)
    {
    $sbegriff = $q;
    $ergebnis_arr = suche($q);
    $ergzaehl = sizeof($ergebnis_arr);
    if ($ergzaehl < 1)
           {
    echo "$GLOBALS[kein_ergebnis]";
    suche($q);
           }
    else
       {
    echo "
    Erklärungen gefunden : 1 - $ergzaehl für $sbegriff<br/><br/>
    ";
    foreach ($ergebnis_arr as $treffer)
    ausgabe($treffer);
       }
    }

    //Begriff in DB suchen
    function suche($query) 
    {
    $query = trim(strtolower(entferne($query)));
    $suchdaten = @file($GLOBALS[index_file]) or die("$GLOBALS[keine_db]");

    //hier evtl. Sortieren??? Bloss wie?
    sort($suchdaten);

    $pages_found = " ";
    foreach ($suchdaten as $search_page)
          {
    $page_arr = explode("|", $search_page);
    $found_count = 0;
    $qry_array = split('[, ]+',trim(strtolower($query)));
    foreach ($qry_array as $qry)
              {
    if (in_array($qry, $page_arr))
                   {
    ++$found_count;
    $pages_found .= $page_arr[0] . " ";
                   }
               }
    if ($found_count == count($qry_array)) $ergebnis_arr[] = $page_arr[0];
          }
    return $ergebnis_arr;
    }

    function ausgabe($einlese)
    {
    global $query;
    $file = @file($einlese);
    if ($file)
         {
    //gefundene Unterseiten einlesen
    $inhalt = implode('', $file);

    // Trefferhäufigkeit ermitteln
    $anzahl = count( explode( $query, $inhalt ) ) - 1;
    echo $anzahl;

    //Linktext ermitteln
    eregi("<h2>(.*)</h2>", $inhalt, $out);
    $title = trim($out[1]);
    $inhalt = strip_tags($inhalt);

    //Treffer verlinken
    $filez = basename ($einlese,".php");
    $array = array("$query");
    echo "<a href='such.php?text=$filez&suchwort=$query'>";
    echo "$title</a><br/>";

    //Vorschautext
    if (isset($title)&&strlen($title)>0)
    $text = "$inhalt";

    for($x=0;$x<count($array);$x++)
              {
    if(stristr($text,$array[$x]))
    echo substr(stristr($text,$array[$x]),0, 200)."<br/><br/>";
              }
          }

    //ansonsten Kurzbeschreibung ausgeben
    else
              {
    echo "<p><b>$query</b><br/><br/>$einlese</p>";
              }
    }
    ...
    ?>
    Danke im Vorraus

  • #2
    Sorge erstmal dafür, dass dein Code ordentlich formatiert und vor allem richtig eingerückt ist. Da blickt kein Mensch durch.

    Im Prinzip geht es so, dass du erstmal alle Daten einlesen musst, in ein (mehrdimensionales) Array packen, und anschließend am besten mit usort sortieren. Danach kannst du die dann ausgeben.
    hopka.net!

    Kommentar

    Lädt...
    X