Avatar billede Slettet bruger
02. februar 2012 - 23:25 Der er 7 kommentarer og
1 løsning

String-søge-algoritme

Hej Eksperter!

Jeg er ude efter en string-søge-algoritme!

Jeg har et langt array med navne, som jeg vil gå igennem.. så skal jeg se om det er tilpas tæt på et navn ($search_str), hvis dette er tilfældet, skal den gemmes i et nyt array.

Vi snakker fx.:

$search_str = "thomas tho"; // som i hvis brugeren stopper med at taste (den søger live)
$names = array("Anders Poulsen", "Thomas Rasmussen", "Dan Thomassen", "Thomas Thomassen");

Lige nu kører jeg noget, hvor jeg deler søgestrengen op i de forskellige ord og kører similar_text() på hvert enkelt ord og navnene.. Men der må være en mere effektiv måde? Jeg leder efter noget lignende MySQL's "contains".. anyone?

God torsdag!

Caspar
Avatar billede olebole Juniormester
02. februar 2012 - 23:34 #1
<ole>

Så er det helt klart RegExp, du skal have fat i. At søge i et array er dog en rigtig skidt idé. Hvor kommer $names fra?

/mvh
</bole>
Avatar billede Slettet bruger
02. februar 2012 - 23:36 #2
Jeg har altid været en hat til regexp, kan du hjælpe?

Det er fordi jeg henter en liste af en persons venner fra Facebook (som jeg af gode grunde får som et array), hvori jeg skal filtrere nogle fra (til en søgefunktion).
Avatar billede Slettet bruger
02. februar 2012 - 23:37 #3
Men en:

[code]        foreach ($available_users as $user) {
            $user_name = strtolower($user[name]);
            $names = explode(" ", $user_name);
            $query = strtolower($query);
            if ($query == $user_name) {
                $filtered_users[$user[id]] = $user;
                break;
            }
            foreach ($names as $name) {
                $score = similar_text($query, $name);
                if ($score >= strlen($query)-1) {
                    $filtered_users[$user[id]] = $user;
                    break;
                }
            }
        }[/code]

Hvor den gennemløber 400 venner kører ret hurtigt, så jeg tror vi er nede på mikro-niveau mht. performance..
Avatar billede olebole Juniormester
02. februar 2012 - 23:56 #4
Måska, men du trækker heller ikke en af PHP's 'sløveste' funktioner ud af stalden ved hvert element  *o)

Jeg ville nok bruge strpos på hvert element i løkken. Hvis det er til en Ajax søgefunktion, sutter det dog 'ræv' ... BIG TIME!
Avatar billede olebole Juniormester
02. februar 2012 - 23:57 #5
Ups ... glemte linket: strpos
Avatar billede Slettet bruger
02. april 2012 - 09:58 #6
Smider du lige et svar olebole?
Avatar billede olebole Juniormester
02. april 2012 - 12:26 #7
Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)
Avatar billede Slettet bruger
01. juni 2012 - 11:05 #8
Lukker
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