Avatar billede askovdk Nybegynder
16. maj 2011 - 23:04 Der er 4 kommentarer

Forbedre søge kode

Dette er noget udklip fra noget kode jeg har som laver livesearch i en XML fil med noget tekst i....


  $q = søgestring

  $a=$x->item($i)->getElementsByTagName('des');


  if (stristr($a->item(0)->childNodes->item(0)->nodeValue,$q))


Det virker fint men problemet er at hvis min tekst er:

"Dette er en blomst lavet af gummi" og man så søger på "gummi blomst" så finder den ikke noget, fordi at de ikke står sammenhængende i min tekst....

Hvordan kan jeg forbedre stristr($a->item(0)->childNodes->item(0)->nodeValue,$q så den kan finde fx. 3 ord selv om det ikke står sammenhængende i teksten ?
Avatar billede wanze Nybegynder
16. maj 2011 - 23:16 #1
Du kan dele søgeresultatet op i flere dele, så du først søger efter "gummi" og derefter søger du efter "blomst".
Avatar billede askovdk Nybegynder
17. maj 2011 - 09:31 #2
Kan ikke helt se hvordan jeg skal lave dette, har du et eksempel ?
Avatar billede coderdk Praktikant
17. maj 2011 - 10:05 #3
$q = explode( " ", $q );

$resultater = array();

foreach ( $q as $ord )
{
  // Søg efter $ord her
  // Tilføj resultat til $resultater - Evt. vægt resultatet højere hvis det matcher flere af ordene
}
Avatar billede wanze Nybegynder
17. maj 2011 - 13:30 #4
Ja, præcis som coderdk siger. Du kan så lægge dem ind i et associativt array (fx $resultater som der også bliver nævnt), hvor du så lægger én til elements værdi, hver gang du finder en match. Til sidst vil du derefter kunne sortere dit array baseret på værdien, så de resultater med flest matchende ord vil komme først.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester