Avatar billede onkel_satan Nybegynder
15. august 2004 - 16:23 Der er 11 kommentarer og
1 løsning

Hashtabel i php ?

Hejsa!

Skal lave en søgefunktion til et forum.
Derfor ville jeg høre om hashtabeller findes i php.
Kan se at der findes hashfunktioner så som md5(), men syntes ikke at kunne finde hashtabeller.
Avatar billede dennismp Nybegynder
15. august 2004 - 16:30 #1
Almindelig arrays kan bruges som hashtabeller (det er sådan set een og samme ting i php)

$forum = array();

$forum['key'] = 'test';

..

print $forum['key'];

Hvis du fx opretter et array med elementerne; et, to, tre.
$array = array('et','to','tre');
print $array[0]; // udskriver: et

så har du egentlig oprettet et "hashtabel", hvor nøglen er 0, 1 og 2. Hvis man selv vil bestemme hvad nøglen skal være kan man skrive
$array = array('abe'=>'et','kat'=>'to', 'sjover'=>'tre');
print $array['abe']; // udskriver: et
Avatar billede onkel_satan Nybegynder
15. august 2004 - 16:45 #2
Ok det er jeg med på, men hvis jeg prøver at indsætte noget på f.eks key 2 og der i forvejen findes en vaerdi ?? erstatter den nye vaerdi så ikke bare den gamle ?
Avatar billede onkel_satan Nybegynder
15. august 2004 - 16:46 #3
eller sagt på en anden måde, der kan kun vaere en værdi/variable for hver key, korrekt ?
Avatar billede dennismp Nybegynder
15. august 2004 - 16:48 #4
Jep. Hvis du vil teste om en given værdi findes så kan du bruge isset.

if( isset($array['kat']) )
  // nøglen findes
else
  // det gør den ikke
Avatar billede onkel_satan Nybegynder
15. august 2004 - 16:59 #5
Ok, men så er det vel egentlig heller ikke en hastabel.
En hashtabel skal jo kunne have flere værdier til hver nøgle.
En hashtabel er jo som du siger i princippet et array med en nøgle tilknyttet. Men i stedet for at have en variable som værdi har en 'linked list' hvor der igen kan lagres flere værdier.
Det er det jeg søger, håber du kan følge mig.
Avatar billede dennismp Nybegynder
15. august 2004 - 17:07 #6
En hashtabel er da bare en tabel, hvor værdierne har tilknyttet en nøgle. Hvordan den opfører sig, tror jeg er implementations/definitionsafhængig. Men mener at java smider en exception i nakken på dig, hvis du tilføjer en key som findes.

Men det er ikke så svært at lave:

$array = array();
if(! isset($array['kat']) ) $array['kat'] = array();
$array['kat'][] = 'værdi';

Så peger $array['kat'] bare på endnu et array, med alle de værdier som er knyttet til 'kat'.

Jeg tror faktisk at du kan undvære if-sætningen - men jeg kan bedst lide at initialisere mine ting explicit :).
Avatar billede onkel_satan Nybegynder
15. august 2004 - 17:23 #7
Ok ved ikke præcis hvad definationen på hastable er, men den jeg havde i tankerne var den man bruger til at søge med, som opfynder ovenstående.
Dertil kommer så at der oxo skal bruges en hashfunktion til at generere nøgler.
Har set at der i perl findes en funktion, som selv kan lave alt det her og tænkte på om det oxo fandtes i php. Men det ser ud til at man skal lave det selv.
Avatar billede dennismp Nybegynder
15. august 2004 - 17:32 #8
Kan du ikke bare bruge sql til dit forum? Jeg forstår ikke helt hvorfor du vil have hashtabeller. Gemmer du i filer?
Avatar billede onkel_satan Nybegynder
15. august 2004 - 17:46 #9
Tjo det kan jeg vel oxo, men fik et tip om at det var smart til lige præcis søgning.
Efter at have læst om det blev jeg alligevel lidt betaget over hvor snart det egentlig er og fik lyst til at prøve det af ;-)
Plus jeg har nogle andre ting som ikke bruger database som jeg godt kunne tænke mig at overføre det til, men lige mit forum er lagret i en database.
Hvis du ikke kender til det kan du tjække dette link ud:
http://www.sparknotes.com/cs/searching/hashtables/summary.html

Ret interessant og altid rart at vide hvordan det egentlig fungere, hvis du spørg mig ;-)
Avatar billede dennismp Nybegynder
15. august 2004 - 18:06 #10
Ah nu giver det mening :).

Jeg kan godt love dig for, at MySQL laver alle mulige krumspring for at få hentet dataerne hurtigst muligt. Om det lige er hashtabeller den bruger eller om det er nogle af de andre metoder, ved jeg ikke (det kan man sikkert læse sig frem til).
Avatar billede onkel_satan Nybegynder
23. september 2006 - 18:16 #11
lukker
Avatar billede dennismp Nybegynder
23. september 2006 - 19:11 #12
Selv tak
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