Haku joka etsii 'sanan', kaikista tiedostoista jotka ovat $kansion sisällä. Myöhemmin voikin lisäillä tuen monelle sanalle. Ja sitten vielä jälkeenpäin myöhemmin sama preg_matchilla.
<?php if(isset($_POST["hakusana"])) { $haku = $_POST["hakusana"]; } $sanatyhteensa = 0; $sivutyhteensa = 0; $yhteensa = 0; $osumat = 0; $kansio = "./Sivut/"; $offset = 5; //Haun alustus if ($dh = opendir($kansio)) { while(($luettava = readdir($dh)) !== false) { if ($luettava != "." && $luettava != "..") { $tiedostomuoto = filetype($kansio.$luettava); //Alikansiot if($tiedostomuoto <> "dir") { $tiedosto = file($kansio.$luettava); //Tiedostonimi $taulukko[$sivutyhteensa][0] = $luettava; for($i = 0; $i < count($tiedosto); $i++) { //Poistetaan html $tiedosto[$i] = strip_tags($tiedosto[$i]); //Sijoitetaan sanat taulukkoon $tempsanat = explode(" ", $tiedosto[$i]); $tempsanat = str_replace("\n", "", $tempsanat); $tempsanat = str_replace("\r", "", $tempsanat); //Listataan sanat taulukkoon for($a = 0; $a < count($tempsanat); $a++) { $taulukko[$sivutyhteensa][$yhteensa+1] = $tempsanat[$a]; $yhteensa++; $sanatyhteensa++; } } $yhteensa = 0; $sivutyhteensa++; } } } closedir($dh); } //Etsitään sanaa if(isset($haku)) { for($i = 0; $i < $sivutyhteensa; $i++) { $alisolut = count($taulukko[$i], COUNT_RECURSIVE); for($a = 1; $a < $alisolut; $a++) { if( strtolower($taulukko[$i][$a]) == strtolower($haku) ) { $osumat++; //Tulostus echo "<br><hr size=\"1\"><b><a href=\"index.php?s=".$taulukko[$i][0]."&linkit=".$polku."\">".$taulukko[$i][0]."</a></b><br>"; for($s = $a-$offset; $s < $a; $s++) { echo @$taulukko[$i][$s]." "; } echo " <u>".@$taulukko[$i][$a]."</u> "; for($s = $a+1; $s < $a+6; $s++) { echo @$taulukko[$i][$s]." "; } echo "..."; echo "<br><hr size=\"1\">"; } } } } //Statsit if($osumat == 0) { echo "<br><b>Ei löytynyt yhtäkään sivua joka vastaa hakuasi:</b> $haku"; } else { echo "<br><b>Löytyi $osumat osumaa hakusanalla:</b> $haku"; } echo "<br>Etsittiin $sivutyhteensa sivun joukosta jotka sisälsivät yhteensä $sanatyhteensa sanaa."; ?>
Pieni ehdotus, tämän rivin:
if($taulukko[$i][$a] == $haku or $taulukko[$i][$a] == $haku2 or $taulukko[$i][$a] == $haku3 or $taulukko[$i][$a] == $haku4)
voisi korvata esim. tämmöisellä:
if( strtolower($taulukko[$i][$a]) == strtolower($haku) )
Haku toimisi täysin isoista ja pienistä riippumatta, ja saa pois nuo haku2,haku3 ja haku4:n.
Uh... aikamoista purkkaa.
Miksi pitää tehdä erillinen taulukko tiedoille joista etsitään? Joo-o... Parempiakin vinkkejä jätetty hyväksymättä :/
Anttipandan neuvosta väärti. Löytyhän sieltä virhekin, eli statsit kohdassa tulostettiinkin kuinka monen rivin joukosta etsittiin eikä sanan.
Onhan toi taulukkoon listaus kyllä aivan turha. Voisihan sen haun tarkistaa suoraankin ilman taulukoita. No toivotaan, että joku tästä jotain oppii.
Tässä vielä haku toiminnassa: http://koti.mbnet.fi/smannila/testi/index.php
Ei tämä huono ole, ihan hyvä. Muistakaa jätkät ,että jokaisella on oma tapa koodata... =)
Aihe on jo aika vanha, joten et voi enää vastata siihen.