Kom ihåg mig?
Home Menu

Menu


Sätta array-pekare i PHP

 
Ämnesverktyg Visningsalternativ
Oläst 2008-03-25, 00:04 #11
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Originally posted by jimmie@Mar 24 2008, 23:06
array_slice kanske kan fungera? Dvs. plocka ut den delen av arrayen som är intressant och därmed få ditt startelement först i arrayen och sedan loopa igenom.
http://se2.php.net/manual/en/function.array-slice.php
Man ska dock komma ihåg att en array i PHP inte är någon array egentligen utan en hastabell om man tittar på PHPs interna representation av hur arrayen lagras.
Tyvärr känner jag inte till vilken plats i arrayen elementet den ska börja med har. Jag antar att PHP internt håller koll på ordningen av elementen med en dubbellänkad lista och sådana fall går det åt många cykler bara att stega fram till offset:en för array_slice() vilket är precis det jag vill undvika.

Jag sitter inte och idiotoptimerar små droppar i havet utan tycker att det här problemet är intressant ur ett akademiskt perspektiv. Tanken slog mig när jag funderade på att faktiskt göra precis det här med mycket stora array:er.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-25, 00:09 #12
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Originally posted by etanders@Mar 24 2008, 23:50
För en något generellare lösning hade jag nog valt att skriva en klass med sådana egenskaper att den uppfyllde de specifikationer jag hade, eftersom php uppenbarligen inte har någon inbyggd funktion för just detta.
Det finns ju ett antal standard-datastrukturer att utgå ifrån. Länkad lista är en, kanske skulle en dubbellänkad lista vara att föredra beroende på hur generellt det ska vara. Problemet med länkad lista är ju att det inte går att gå direkt till ett element mitt i listan utan att stega igenom alla föregående element och det var väl ungefär detta du ville undvika, så jag skulle inte valt en ren länkad lista...
...eller så skriver man en oneliner istället för en hel klass. Åter igen så är jag bara intresserad av att göra det här effektivt utan att slänga bort mängder med klockcykler i onödan.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-25, 07:45 #13
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
För att kunna loopa igenom datamängden när startelementet väl är funnet behövs antingen en referens till nästföljande i varje element (som en länkad lista) eller ett heltalsbaserat index för direktåtkomst (som i en klassisk array). För att hitta startelementet (med känd nyckel enligt din första post) behövs någon form av hashtabell/map/dictionary.

Så för att göra det du efterfrågar ser det ut som om dessa principer behöver kombineras till en ny datastruktur, t.ex. en klass med implementation inspirerad av mitt första svar i denna tråd. Något bättre rent generellt kan jag inte komma på just nu. Beroende på exakt vad man vill åstadkomma och varifrån arrayen kommer går det kanske att förbättra det något.
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-03-25, 11:57 #14
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Originally posted by etanders@Mar 25 2008, 07:45
För att kunna loopa igenom datamängden när startelementet väl är funnet behövs antingen en referens till nästföljande i varje element (som en länkad lista) eller ett heltalsbaserat index för direktåtkomst (som i en klassisk array). För att hitta startelementet (med känd nyckel enligt din första post) behövs någon form av hashtabell/map/dictionary.

Så för att göra det du efterfrågar ser det ut som om dessa principer behöver kombineras till en ny datastruktur, t.ex. en klass med implementation inspirerad av mitt första svar i denna tråd. Något bättre rent generellt kan jag inte komma på just nu. Beroende på exakt vad man vill åstadkomma och varifrån arrayen kommer går det kanske att förbättra det något.
PHP håller redan koll på nästa och föregående element.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017