exciter: WANTED: bestimmte Suchfunktion!

Hallo alle zusammen! Ich habe folgendes Problem: Ich baue mir zur Zeit eine Suchmaschine, die eine Textdatei zeilenweise nach einem oder mehreren Begriffen durchsucht. Hier mal der Code:

<?php

if(!isset($_GET["do"]) OR $_GET["do"] !== "search") {

echo <<<eot
<h1>Suche</h1>
<form action="search@aw.php" method="GET">
 <input type="hidden" name="do" value="search">
 <input type="text" name="woerter" size="50"> <input type="submit" value="Suchen">
</form>
eot;

}elseif($_GET["woerter"] == "") {

echo <<<eot
<h1>Bitte eins oder mehrere Suchwörter eingeben!</h1>
<form action="search@aw.php" method="GET">
 <input type="hidden" name="do" value="search">
 <input type="text" name="woerter" size="50"> <input type="submit" value="Suchen">
</form>
eot;

}else {

$datei="datei.txt";//Name der Datei
$zeilen=file($datei);//Einlesen aller Zeilen in ein Array
$anzahl_zeilen=count($zeilen);//Wieviele Zeilen die Datei hat
$woerter=htmlentities(trim($_GET["woerter"]));//GET-->Var
$einzelwoerter=explode(" ", $woerter);//Trennung der Einzelwoerter am Leerzeichen
$anzahl_woerter=count($einzelwoerter);//Anzahl der Einzelwoerter
$match=0;

//Eigentliche Suchabfrage
 for($x=0; $x<=$anzahl_zeilen-1; $x++) {
  for($y=0; $y<=$anzahl_woerter-1; $y++) {
   if(substr_count($zeilen[$x], $einzelwoerter[$y])) {
    $save[$match]=$zeilen[$x];
    $match++;
    }
    else {
    $ter=0;
   }
  }
 }

if($match==0 AND $ter==0) {

echo <<<eot
<h1>Keine Suchergebnisse...</h1>
<form action="search@aw.php" method="GET">
 <input type="hidden" name="do" value="search">
 <input type="text" name="woerter" size="50"> <input type="submit" value="Suchen">
</form>
eot;

}else {

$save=array_values(array_unique($save));
$matches=count($save);

echo "<h1>Ergebnisse</h1><b>$matches Treffer</b><br><br>";

for($z=0; $z<count($save); $z++) {
 echo $save[$z]."<br>";
 }
echo <<<eot
<form action="search@aw.php" method="GET">
 <input type="hidden" name="do" value="search">
 <input type="text" name="woerter" size="50"> <input type="submit" value="Suchen">
</form>
eot;

}
}

?>

Soweit, so gut. Aber ich will nun, dass diejenigen Zeilen, die mehr Treffer enthalten, zuerst angezeigt werden.
if(substr_count($zeilen[$x], $einzelwoerter[$y])) {

leider unterscheidet substr_count Groß- und Kleinschreibung. Ich brauche deshalb eine Funktion, die die Treffer pro Zeile mitzählt und das Array $save, in dem alle Trefferzeilen gespeichert sind, nach den Treffern absteigend sortiert. Hat jemand vielleicht eine Idee, wie ich das angehen könnte?

  1. hi,

    if(substr_count($zeilen[$x], $einzelwoerter[$y])) {
    leider unterscheidet substr_count Groß- und Kleinschreibung.

    dann wandle doch beide parameter in kleinschrift um, bevor du sie vergleichst, z.b.:
    if(substr_count(strtolower($zeilen[$x]), strtolower($einzelwoerter[$y])))

    Ich brauche deshalb eine Funktion, die die Treffer pro Zeile mitzählt und das Array $save, in dem alle Trefferzeilen gespeichert sind, nach den Treffern absteigend sortiert. Hat jemand vielleicht eine Idee, wie ich das angehen könnte?

    speichere dir die anzahl suchtreffer pro zeile in einem weiteren array, und sortiere anschliessend mit array_multisort().
    http://www.php.net/manual/de/function.array-multisort.php

    gruss,
    wahsaga

    1. Hi! Danke erstmal für den Tipp mit Groß-/Kleinschreibung.

      speichere dir die anzahl suchtreffer pro zeile in einem weiteren array, und sortiere anschliessend mit array_multisort().

      Wie kann ich die Suchtreffer pro Zeile in ein neues Array speichern bzw. wo soll ich diesen Code einfügen?

      exciter.

      1. hi,

        Wie kann ich die Suchtreffer pro Zeile in ein neues Array speichern bzw. wo soll ich diesen Code einfügen?

        du weisst, dass du gerade zeile nummer $i durchsuchst.
        jedes mal, wenn du einen treffer findest, erhöhst du einfach den wert von $treffer[$i] um eins.

        gruss,
        wahsaga