Kasper Johansen wrote:
> Det skal måske siges, at jeg allerede har en løsning, hvor jeg
> gennemløber hele arrayet og afbryder med med en "return", når jeg finder
> et resultat.
>
> Jeg kunne bare forstille mig, at det andet var mærkbart hurtigere.
Du kan gøre det at du fortsætter fra den sidste position du er kommet
til i arrayet, ved at bruge "key" til at checke hvor du er, og bruge
"next" og "prev" afhængig af om du er for lavt eller højt.
Meen, så simpelt behøver det ikke være.
I bedste fald, hvor de keys du søger efter ligger tæt op ad hinanden,
vil det blive væsentligt hurtigere.
I værste fald, i det tænkte tilfælde hvor du har skiftevis en høj og
en lav værdi du søger efter, bliver den gennemsnitlige søgelængde
væsentligt længere.
Hvis du kender fordelingen på nøglerne, kan du evt forbedre
ovenstående metode, ved at hoppe til starten("reset") eller
enden("end"), hvis du kan vurdere om det du søger efter ligger i
toppen eller bunden.
Det kan du evt. tage et skridt videre, ved at opdele arrayet du søger
i, i flere mindre arrays. Det kræver at du udfra en key kan afgøre
(eller ramme tæt på) hvilket array du skal have fat i, som vil svare
lidt til at hoppe rundt i arrayet, som du nævnte. Det kræver
selvfølgelig lidt mere logik, og længere "forberedelse".
Et skridt videre, kan du med sqlite oprette en database i memory. Som
sandsynligvis ville kunne gøre søgningen hurtigere, i alle generelle
tilfælde, men igen længere forberedelse førend du kan begynde at søge,
som gør at det måske ikke kan svare sig.
http://dk2.php.net/manual/en/function.sqlite-open.php
/Bent